同じプロセスで .NET 3.5 と 4/4.5 アセンブリを混在させる 質問する

同じプロセスで .NET 3.5 と 4/4.5 アセンブリを混在させる 質問する

.NET 3.5 WinForms ベースのアプリケーションを最新の .NET バージョン (4.5) に移行したいと考えています。

アプリケーションは、現在 .NET 3.5 ベースの「外部」コンポーネント (プラグインと考えることもできます) を使用します。

変換する場合にどのランタイム/コアライブラリが使用されるかを知りたいですアプリケーションのみ.NET 4.5 を使用してコンパイルするには?

このシナリオは適切に動作するでしょうか? (4.5 プロセスで .NET 3.5 アセンブリをロードする) * プラグイン アセンブリはリフレクションを介してロードされます。

CLR ランタイムはこのようなシナリオをどのように処理しますか? これは安全な方法でしょうか?

ベストアンサー1

アプリのメイン EXE を再コンパイルして .NET 4.x をターゲットにするか、<supportedRuntime>要素を含む app.exe.config ファイルを使用して CLR バージョン 4 を強制的に使用すると、.NET 3.5 アセンブリと .NET 4.0 アセンブリの両方を問題なく使用できます。CLR v4 は 3.5 アセンブリの読み取りに問題がなく、下位互換性があります。その逆はありません。CLR v2 はバージョン 4 アセンブリを読み取ることができないため、EXE が v4 をターゲットにしていない場合は .config ファイルが必要になります。

唯一の問題は、3.5アセンブリが古いフレームワークアセンブリに依存していることです。たとえば、mscorlib.dllのバージョン2.0.0.0が要求されます。CLRは自動的に翻訳するこれらの要求をバージョン 4.0.0.0 に置き換えます。これは通常問題なく機能し、標準の 4.0 フレームワーク アセンブリは古いバージョンと非常に互換性があります。

しかし、Microsoft は、新しいサイドバイサイド バージョンである 4.0 の機会を利用して、バグのある動作に誤って依存したコードを壊すリスクを冒さずに簡単に修正できなかった古いバグを修正しました。これらは非常にわかりにくいバグであり、これらのバグ修正が問題になる可能性はほとんどありません。ただし、確実にするためにコードを再テストする必要があります。

おすすめ記事