Share via


コード アクセス セキュリティ ポリシーの互換性と移行

.NET Framework Version 4 では、コード アクセス セキュリティ (CAS: Code Access Security) のポリシー部分が廃止されました。 そのため、旧式のポリシーの型とメンバーを明示的に呼び出すか、その他の型とメンバーを介して暗黙的に呼び出すと、コンパイル警告およびランタイム例外が発生する場合があります。

次のいずれかの方法で警告およびエラーを回避できます。

このトピックは、次のセクションで構成されています。

  • 明示的な使用

  • 暗黙的な使用

  • エラーと警告

  • 移行: 旧式の呼び出しの置き換え

  • 互換性: 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 を使用する必要がないメンバーが公開されています。詳細については、「方法 : サンドボックスで部分信頼コードを実行する」を参照してください。

部分的に信頼されているコードのための安全または適切なアクセス許可セットの決定

多くの場合、ホストが、ホストされたコードのサンドボックス化に適したアクセス許可を決定する必要があります。 .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>

参照

処理手順

方法 : サンドボックスで部分信頼コードを実行する