.NET Core と .NET 5 以降で使用できない .NET Framework テクノロジ

.NET Framework ライブラリで使用できるテクノロジの中には、.NET 5+ (および .NET Core) で使用できないものがあります。たとえば、アプリ ドメイン、リモート処理、コード アクセス セキュリティ (CAS) などです。 ご利用のライブラリがこのページに一覧表示されているテクノロジの 1 つ以上に依存する場合は、記載されている代替方法を検討してください。

API の互換性の詳細については、.NET の破壊的変更に関するページを参照してください。

アプリケーション ドメイン

アプリケーション ドメイン (AppDomains) はアプリを互いに分離します。 AppDomain にはランタイム サポートが必要で、リソースを大量に消費します。 追加のアプリ ドメインの作成はサポートされておらず、今後この機能を追加する予定はありません。 コードの分離のためには、代替方法として別個のプロセスやコンテナーを使用します。 アセンブリを動的に読み込むには、AssemblyLoadContext クラスを使用します。

.NET Framework からのコードの移行をより簡単にするために、.NET 5 以降では AppDomain API サーフェスの一部を公開しています。 API の中には、正常に機能するもの (AppDomain.UnhandledException など)、処理を行わないメンバー (SetCachePath など)、PlatformNotSupportedException をスローするもの (CreateDomain など) があります。 dotnet/runtime GitHub リポジトリSystem.AppDomain 参照ソースに対して使用する種類を確認してください。 必ず、実装されているバージョンに合ったブランチを選択してください。

リモート処理

.NET リモート処理は、.NET 5+ (および .NET Core) ではサポートされていません。 .NET リモート処理は、問題のあるアーキテクチャであると判断されました。 これは、現在サポートされていないアプリケーション ドメインとの間の通信に使用されています。 また、リモート処理にはランタイム サポートも必要で、維持するのに高いコストがかかります。

プロセス間のシンプルな通信については、リモート処理に代わる方法として、System.IO.Pipes クラスまたは MemoryMappedFile クラスなどのプロセス間通信 (IPC) メカニズムを検討してください。 より複雑なシナリオでは、オープンソースの StreamJsonRpc プロジェクトによって、既存のストリームまたはパイプ接続上で動作するクロスプラットフォームの .NET Standard リモート処理フレームワークが提供されます。

マシン間では、代替方法としてネットワーク ベースのソリューションを使用してください。 可能であれば、HTTP などのオーバーヘッドの少ないプレーンテキストのプロトコルを使用してください。 この場合、ASP.NET Core で使用される Web サーバーの Kestrel Web サーバーも選択できます。 また、ネットワーク ベースのマシン間のシナリオとして、System.Net.Sockets の使用も検討してください。 前述の StreamJsonRpc は、Web ソケットを介した JSON またはバイナリ (MessagePack 経由) 通信に使用できます。

その他のメッセージング オプションについては、.NET オープン ソース開発者プロジェクト: メッセージングに関するページをご覧ください。

コード アクセス セキュリティ (CAS)

サンドボックスは、マネージド アプリケーションやライブラリによって使用または実行されるリソースの制限を、ランタイムまたはフレームワークに依存しています。これは .NET Framework によりサポートされていないため、.NET Core と .NET 5 以降でもサポートされません。 .NET Framework やランタイムでは、特権の昇格が発生するケースが多すぎるため、このまま CAS をセキュリティ境界と見なすことはできません。 また、CAS は実装が複雑化しており、その使用を予定していないアプリケーションでは、多くの場合で正確性のパフォーマンスに影響します。

仮想化、コンテナー、ユーザー アカウントなど、オペレーティング システムが提供するセキュリティ境界を使用して、最小限の特権セットでプロセスを実行します。

セキュリティ透過性

CAS と同様に、セキュリティ透過性はサンドボックス コードをセキュリティ クリティカルなコードから宣言的に分離しますが、現在はセキュリティ境界としてはサポートされていません。 この機能は、Silverlight で頻繁に使用されます。

仮想化、コンテナー、ユーザー アカウントなど、オペレーティング システムが提供するセキュリティ境界を使用して、最低限の特権セットでプロセスを実行します。

System.EnterpriseServices

System.EnterpriseServices (COM+) は、.NET Core および .NET 5 以降ではサポートされていません。

Workflow Foundation と WCF

Windows Workflow Foundation (WF) と Windows Communication Foundation (WCF) は、.NET 5 以降 (.NET Core を含む) ではサポートされていません。 代替方法については、「CoreWF」、および CoreWCF に関するページを参照してください。

リフレクションによって生成されたアセンブリの保存

.NET 5 以降 (.NET Core を含む) では、System.Reflection.Emit API によって生成されたアセンブリの保存はサポートされていません。 AssemblyBuilder.Save メソッドは、.NET 5 以降 (.NET Core を含む) では使用できません。 さらに、AssemblyBuilderAccess 列挙型の次のフィールドは使用できません。

別の方法として、ILPack ライブラリを検討してください。

詳細については、dotnet/runtime のイシュー 15704 を参照してください。

関連項目