.NET 2 ランタイムに基づくアプリケーションがあります。.NET 4 のサポートを少し追加したいのですが、(短期的には) アプリケーション全体 (非常に大きい) をターゲット .NET 4 に変換したくありません。
私は、アプリケーションの.configファイルを作成する「明白な」アプローチを試みました.
<startup useLegacyV2RuntimeActivationPolicy="true">
<supportedRuntime version="v4.0" />
</startup>
しかし、ここで指摘したいくつかの問題に遭遇しました。
別のアプリ ドメインを作成するというアイデアが浮かびました。それをテストするために、.NET 2 をターゲットとする WinForm プロジェクトを作成しました。次に、.NET 4 をターゲットとするクラス ライブラリを作成しました。WinForm プロジェクトに、次のコードを追加しました。
AppDomainSetup setup = new AppDomainSetup();
setup.ApplicationBase = "path to .NET 4 assembly";
setup.ConfigurationFile = System.Environment.CurrentDirectory +
"\\DotNet4AppDomain.exe.config";
// Set up the Evidence
Evidence baseEvidence = AppDomain.CurrentDomain.Evidence;
Evidence evidence = new Evidence(baseEvidence);
// Create the AppDomain
AppDomain dotNet4AppDomain = AppDomain.CreateDomain("DotNet4AppDomain", evidence, setup);
try
{
Assembly doNet4Assembly = dotNet4AppDomain.Load(
new AssemblyName("MyDotNet4Assembly, Version=1.0.0.0, Culture=neutral, PublicKeyToken=66f0dac1b575e793"));
MessageBox.Show(doNet4Assembly.FullName);
}
finally
{
AppDomain.Unload(dotNet4AppDomain);
}
私の DotNet4AppDomain.exe.config ファイルは次のようになります。
<startup useLegacyV2RuntimeActivationPolicy="true">
<supportedRuntime version="v4.0" />
</startup>
残念ながら、これは dotNet4AppDomain.Load が実行されると BadImageFormatException をスローします。コードで何か間違ったことをしているのですか、それとも私がやろうとしていることがうまくいかないのですか?
ありがとうございました!