3

.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 をスローします。コードで何か間違ったことをしているのですか、それとも私がやろうとしていることがうまくいかないのですか?

ありがとうございました!

4

2 に答える 2

1

2.0 をターゲットにしているので、それがメモリにロードされます... 4.0 イメージをロードするように要求します... 動作しない場合は、正しいバージョンの新しいランタイム インスタンスをスピンする必要があります。 .

これを行う唯一の方法は、「C プログラムで CLR をホストすることは可能ですか?」で説明されているように、プロセス内で 2 番目の CLR をホストすることです。.Net 4.0で可能になりました。

于 2010-03-26T17:35:45.847 に答える
0

.NETランタイムのバージョン2には.NET4の手がかりも理解もないのではないかと思う傾向があります。質問の音と性質から、逆に扱っています。コンパイルしてみましたか.NET4をターゲットにして.NET2ランタイムライブラリをロードする...コンパイルされたコードの異なるバージョン(1つは.NET 4用、もう1つは.NET 2用)を同じものに混在させることはできないと思います。処理する...

于 2010-03-26T17:39:50.410 に答える