程式碼存取安全性原則相容性和移轉

程式碼存取安全性 (CAS) 的原則部分在 .NET Framework 4 版中已經過時,不再適用。 因此,如果以明確或隱含方式 (透過其他類型和成員) 呼叫過時的原則類型與成員,您可能會遇到編譯警告與執行階段例外狀況。

您可以透過下列方式避免出現警告與錯誤:

此主題包括下列章節:

  • 明確使用

  • 隱含使用

  • 錯誤和警告

  • 移轉:取代過時呼叫

  • 相容性:使用 CAS 原則舊版選項

明確使用

直接管理安全性原則或對沙箱要求 CAS 原則的成員都已過時,而且預設會出現錯誤。

範例如下:

隱含使用

有幾個載入多載的組件會產生錯誤,因為它們隱含使用了 CAS 原則。 這些多載會接受用於解析 CAS 原則的 Evidence 參數,並且提供為組件的使用權限授權集。

以下是一些範例。 過時的多載是指接受 Evidence 做為參數的下列多載:

錯誤和警告

如果使用了過時的型別與成員,會出現下列錯誤訊息。 請注意,System.Security.Policy.Evidence 型別本身並沒有過時。

編譯時期的警告:

warning CS0618: '<API Name>' is obsolete: 'This method is obsolete and will be removed in a future release of the .NET Framework. Please use <suggested alternate API>. See <link> for more information.'

執行階段例外狀況:

NotSupportedException: This method uses CAS policy, which has been obsoleted by the .NET Framework. In order to enable CAS policy for compatibility reasons, please use the <NetFx40_LegacySecurityPolicy> configuration switch. Please see <link> for more information.

移轉:取代過時呼叫

決定組件的信任層級

CAS 原則通常用於決定組件或應用程式定義域的使用權限授權集或是信任層級。 .NET Framework 4 會公開下列實用的屬性,它們並不需要解析安全性原則:

應用程式定義域沙箱作業

AppDomain.SetAppDomainPolicy 方法通常用於對應用程式定義域中的組件進行沙箱化處理。 .NET Framework 4 會公開不需基於此目的而使用 PolicyLevel 的成員。如需詳細資訊,請參閱 HOW TO:在沙箱中執行部分信任的程式碼

判斷部分受信任程式碼的安全或合理使用權限組

主機通常不需要決定進行沙箱處理之裝載程式碼適用的使用權限。 在 .NET Framework 4 之前,CAS 具有相關機制可透過 SecurityManager.ResolvePolicy 方法執行此作業。 為了取代這項功能,.NET Framework 4 提供了 SecurityManager.GetStandardSandbox 方法,為已提供的辨識項傳回安全、標準的使用權限集合。

非沙箱化案例:組件載入的多載

不對組件進行沙箱化處理,而使用組件載入多載的原因,可能是為了要使用在其他情況下無法使用的參數。 從 .NET Framework 4 起,不需要 System.Security.Policy.Evidence 物件做為參數 (例如 AppDomain.ExecuteAssembly(String, String[], Byte[], AssemblyHashAlgorithm)) 的組件載入多載就適用這個案例。

如果您要對組件進行沙箱化處理,請使用 AppDomain.CreateDomain(String, Evidence, AppDomainSetup, PermissionSet, StrongName[]) 多載。

相容性:使用 CAS 原則舊版選項

<NetFx40_LegacySecurityPolicy> 組態項目 可以讓您指定處理序或程式庫要使用舊版 CAS 原則。 當您啟用這個項目時,原則與辨識項多載的運作方式與在舊版 Framework 中的運作方式相同。

注意事項注意事項

CAS 原則行為是以執行階段版本為根據而指定,如此一來,修改某一個執行階段版本的 CAS 原則時,就不會影響到另一個版本的 CAS 原則。

<configuration>
   <runtime>
      <NetFx40_LegacySecurityPolicy enabled="true"/>
   </runtime>
</configuration>

請參閱

工作

HOW TO:在沙箱中執行部分信任的程式碼