DynamicMethod.IsSecuritySafeCritical 屬性

定義

取得值,這個值表示目前動態方法在目前信任層級上是否為安全性安全關鍵,也就是說,它是否能執行重要作業並由安全性透明的程式碼存取。

public override bool IsSecuritySafeCritical { get; }

屬性值

如果動態方法在目前信任層級上為安全性安全關鍵,則為 true;如果為安全性關鍵或安全性透明,則為 false

例外狀況

此動態方法沒有方法主體。

備註

IsSecurityCriticalIsSecuritySafeCriticalIsSecurityTransparent 屬性會報告動態方法的透明度層級,如 Common Language Runtime (CLR) 所決定。 下表顯示這些屬性的組合:

安全性層級 IsSecurityCritical IsSecuritySafeCritical IsSecurityTransparent
重大 true false false
安全關鍵 true true false
透明 false false true

使用這些屬性會比檢查組件及其類型的安全性註釋、檢查目前的信任層級,以及嘗試複製執行階段規則更簡單。

動態方法的透明度取決於其相關聯的模組。 如果動態方法與類型而非模組相關聯,其透明度取決於包含類型的模組。 動態方法沒有安全性批注,因此會為其指派相關聯模組的默認透明度。

  • 匿名裝載的動態方法一律是透明的,因為包含它們的系統提供的模組是透明的。

  • 下表說明與受信任元件相關聯的動態方法透明度 (,也就是全域程式集緩存中安裝的強名稱元件) 。

    元件批注 層級 1 透明度 層級 2 透明度
    完全透明 透明 透明
    完全重要 重大 重大
    混合透明度 透明 透明
    安全性無關 安全關鍵 重大

    例如,如果您將動態方法與 mscorlib.dll 中具有層級 2 混合透明度的類型產生關聯,則動態方法是透明的,而且無法執行重要的程序代碼。 如需透明度層級的相關信息,請參閱 安全性透明程式代碼、層級 1 和安全性 透明程式代碼、層級 2

    注意

    將動態方法與信任層級 1 元件中與安全性無關的模組建立關聯,例如 System.dll 不允許提高信任。 如果呼叫動態方法的程式代碼授與集不包含 System.dll (的授與集,則呼叫動態方法時會擲回完全信任) SecurityException

  • 與部分信任元件相關聯的動態方法透明度取決於元件的載入方式。 例如,如果元件以部分信任 (載入至沙箱化應用程式域) ,運行時間會忽略元件的安全性批注。 元件及其所有類型和成員,包括動態方法,都會被視為透明。 只有當部分信任元件以完全信任 (載入桌面應用程式的預設應用程式域時,運行時間才會注意安全性批註) 。 在此情況下,運行時間會根據元件的批注,將方法的預設透明度指派給動態方法。

如需反映發出和透明度的詳細資訊,請參閱 反映發出中的安全性問題。 如需透明度的相關信息,請參閱 安全性變更

適用於

產品 版本
.NET Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1

另請參閱