DynamicMethod.IsSecuritySafeCritical 屬性
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
取得值,這個值表示目前動態方法在目前信任層級上是否為安全性安全關鍵,也就是說,它是否能執行重要作業並由安全性透明的程式碼存取。
public:
virtual property bool IsSecuritySafeCritical { bool get(); };
public override bool IsSecuritySafeCritical { get; }
member this.IsSecuritySafeCritical : bool
Public Overrides ReadOnly Property IsSecuritySafeCritical As Boolean
如果動態方法在目前信任層級上為安全性安全關鍵,則為 true
;如果為安全性關鍵或安全性透明,則為 false
。
此動態方法沒有方法主體。
IsSecurityCritical、 IsSecuritySafeCritical和 IsSecurityTransparent 屬性會報告動態方法的透明度層級,如 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 |