同じプロセスで.NETランタイムの2つのバージョンをロードすることは可能ですか?
-
03-07-2019 - |
質問
明確にする必要がある2つのシナリオがあります:
-
.NET 3.5でコンパイルされた実行可能ファイルは、.NET 1.1でコンパイルされたライブラリを使用する必要があり、ライブラリは1.1ランタイムで実行する必要があります。
-
.NET 1.1でコンパイルされた実行可能ファイルは、.NET 3.5でコンパイルされたライブラリを使用する必要があります。
.NETランタイムの2つのバージョンを読み込むことができないことを示す信頼できるソースが見つかりません。Microsoftのドキュメントはこの問題について非常にあいまいです。
解決
いいえ-CLRを同じプロセスに2回ロードすることはできません。 CLRホスティング
のドキュメントを参照してください。の以前のバージョンと同様 ランタイム、CorBindToRuntimeEx 関数はランタイムを初期化します。君は のバージョンを選択できます ロードするランタイムですが、プロセスは 1つのバージョンのみをホストする。
他のヒント
.NET 4は、インプロセスサイドバイサイド。
ケース#1の場合、ライブラリを1.1ランタイムでホストする必要がある特定の理由(たとえば、重大な変更)がありますか? 1.1でコンパイルされたWebサービスを介してライブラリを公開し、代わりにWebサービスを実行可能ファイルに指定することは可能ですか? (または、ライブラリを独自のプロセスで取得するためのその他のリモーティング手法?)
ケース#2の場合、2.0 / 3.5で1.1アプリを再コンパイルして、同じプロセスに常駐させることは可能ですか?
いずれにせよ、Rob Walkerは正しいです(私は賛成しました)-同じプロセスで2つのバージョンのランタイムをホストすることはできません。そのため、どうにかして回避する必要があります。どちらの場合でも、ソースが利用可能でなければならないので、再コンパイルと再テストが再生されるはずだと思います。