連結要求

連結要求會在 Just-In-Time 編譯期間產生安全性檢查,並只檢查您程式碼的即時呼叫組件。 連結只發生於您的程式碼繫結至型別參考時,其中包括函式指標參考和方法呼叫。 如果呼叫組件沒有足夠的使用權限可連結至您的程式碼,則在載入和執行程式碼時將不允許連結並會擲回一個執行階段例外狀況。 連結要求可以在繼承自您程式碼的類別中被覆寫。

請注意在這類需求上並不會執行完整的堆疊查核行程,而您的程式碼仍會受到偽裝攻擊的威脅。 例如,如果組件 A 中的方法是由連結要求所保護,則會依據組件 B 的使用權限評估組件 B 中的直接呼叫端。 不過,如果連結要求使用組件 B 中的方法間接呼叫組件 A 中的方法,則不會評估組件 C 中的方法。 連結要求只會指定立即呼叫組件中的直接呼叫端在連結至您的程式碼時,所要具備的使用權限。 並不會指定所有呼叫端在執行您的程式碼時所必須具備的使用權限。

AssertDenyPermitOnly 堆疊查核行程修飾詞不會影響連結要求時的評估。 由於連結要求不會執行堆疊查核行程,因此堆疊查核行程修飾詞對連結要求沒有影響。

如果受連結要求保護的方法是透過反映加以存取的,則連結要求會檢查透過反映存取的程式碼立即呼叫端。 這種情形也會發生於使用反映所執行的探索 (Discovery) 方法和引動過程方法。 例如,假設程式碼使用反映傳回 MethodInfo 物件 (此物件表示由連結要求保護的方法),然後將該 MethodInfo 物件傳遞給其他使用此物件叫用原來方法的程式碼。 在這種情況下,連結要求檢查會執行兩次:一次是針對傳回 MethodInfo 物件的程式碼,而另一次則是針對叫用 (Invoke) 它的程式碼。

注意事項注意事項

由於靜態建構函式 (Constructor) 是系統在應用程式的程式碼執行路徑以外呼叫的,因此在靜態類別建構函式上執行的連結要求不會保護建構函式。如此一來,當連結要求套用至整個類別時,它不能保護靜態建構函式的存取,不過它可以保護類別的其餘部分。

以下的程式碼片段將宣告任何連結至 ReadData 方法的程式碼必須擁有 CustomPermission 使用權限。 這個使用權限是任意指定的自訂使用權限,並不存在於 .NET Framework 中。 需求的設定方式是將 SecurityAction.LinkDemand 旗標傳遞給 CustomPermissionAttribute。

<CustomPermissionAttribute(SecurityAction.LinkDemand)> _
Public Shared Function ReadData() As String
    ' Access a custom resource.
End Function  
[CustomPermissionAttribute(SecurityAction.LinkDemand)]
public static string ReadData()
{
    // Access a custom resource.
}

請參閱

概念

使用屬性擴充中繼資料

安全性要求

建立您自己的程式碼存取使用權限

加入宣告式安全性支援

程式碼存取安全性