Kompatibilität und Migration von Richtlinien für die Codezugriffssicherheit

Der Richtlinienteil der Codezugriffssicherheit (CAS) ist mit .NET Framework, Version 4 veraltet. Aus diesem Grund treten ggf. Kompilierungswarnungen oder Laufzeitausnahmen auf, wenn Sie die veralteten Richtlinientypen und Member explizit oder implizit aufrufen (durch andere Typen oder Member).

Sie können die Warnungen und Fehler wie folgt umgehen:

Dieses Thema enthält folgende Abschnitte:

  • Explizite Verwendung

  • Implizite Verwendung

  • Fehler und Warnungen

  • Migration: Ersatz für veraltete Aufrufe

  • Kompatibilität: Verwenden der Legacy-Option für die CAS-Richtlinie

Explizite Verwendung

Member, die die Sicherheitsrichtlinie direkt bearbeiten oder die CAS-Richtlinie für die Sandbox benötigen, sind veraltet und erzeugen standardmäßig Fehler.

Beispiele hierfür sind:

Implizite Verwendung

Mehrere Assemblys, die Überladungen laden, erzeugen Fehler aufgrund der impliziten Verwendung der CAS-Richtlinie. Diese Überladungen akzeptieren einen Evidence-Parameter, der verwendet wird, um die CAS-Richtlinie aufzulösen und einen Berechtigungssatz für eine Assembly bereitzustellen.

Hier sind einige Beispiele. Die veralteten Überladungen sind die, die Evidence als Parameter erwarten:

Fehler und Warnungen

Die veralteten Typen und die Member erzeugen die folgenden Fehlermeldungen, wenn sie verwendet werden. Beachten Sie, dass der System.Security.Policy.Evidence-Typ selbst nicht veraltet ist.

Warnung zur Kompilierzeit:

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.'

Laufzeitausnahme:

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.

Migration: Ersatz für veraltete Aufrufe

Bestimmen der Vertrauensebene einer Assembly

CAS-Richtlinie wird häufig verwendet, um den gewährten Berechtigungssatz oder die Vertrauensebene einer Assembly oder Anwendungsdomäne zu bestimmen. .NET Framework 4 bietet die folgenden nützlichen Eigenschaften, die keine Sicherheitsrichtlinie auflösen müssen:

Sandbox für Anwendungsdomänen

Die AppDomain.SetAppDomainPolicy-Methode wird i. d. R. zum Erstellen einer Sandbox für Assemblys in einer Anwendungsdomäne verwendet. .NET Framework 4 stellt Member zur Verfügung, die PolicyLevel zu diesem Zweck nicht verwenden müssen. Weitere Informationen finden Sie unter Gewusst wie: Ausführen von teilweise vertrauenswürdigem Code in einer Sandbox.

Bestimmen eines sicheren oder geeigneten Berechtigungssatzes für teilweise vertrauenswürdigen Code

Hosts müssen häufig die Berechtigungen ermitteln, die für das Testen von gehostetem Code in einer Sandbox geeignet sind. Vor .NET Framework 4 hat die CAS-Richtlinie zu diesem Zweck die SecurityManager.ResolvePolicy-Methode bereitgestellt. Als Ersatz stellt .NET Framework 4 die SecurityManager.GetStandardSandbox-Methode bereit, die einen sicheren Standardberechtigungssatz für den bereitgestellten Beweis zurückgibt.

Szenarios ohne Sandbox: Überladungen für das Laden von Assemblys

Neben dem Erstellen eines Sandkastens für eine Assembly können auch Parameter, die andernfalls nicht verfügbar sind, der Grund für das Verwenden einer Überladung beim Laden von Assemblys sein. Beginnend mit .NET Framework 4 kann dieses Szenario mit Überladungen für das Laden von Assemblys umgesetzt werden, die kein System.Security.Policy.Evidence-Objekt als Parameter erfordern, z. B. AppDomain.ExecuteAssembly(String, String[], Byte[], AssemblyHashAlgorithm).

Wenn Sie Sandbox für eine Assembly erstellen möchten, verwenden Sie die AppDomain.CreateDomain(String, Evidence, AppDomainSetup, PermissionSet, StrongName[])-Überladung.

Kompatibilität: Verwenden der Legacy-Option für die CAS-Richtlinie

Mit dem <NetFx40_LegacySecurityPolicy>-Konfigurationselement können Sie angeben, dass ein Prozess oder eine Bibliothek die Legacy-CAS-Richtlinie verwenden soll. Wenn Sie dieses Element aktivieren, funktionieren die Richtlinien- und Beweisüberladungen wie in früheren Versionen des Frameworks.

HinweisHinweis

Das CAS-Richtlinienverhalten wird abhängig von der Laufzeitversion angegeben, sodass das Ändern der CAS-Richtlinie für eine Laufzeitversion keine Auswirkungen auf die CAS-Richtlinie einer anderen Version hat.

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

Siehe auch

Aufgaben

Gewusst wie: Ausführen von teilweise vertrauenswürdigem Code in einer Sandbox