.net - 是否可以在新的应用程序域中加载针对不同 .NET 运行时版本的程序集?

标签 .net runtime version appdomain side-by-side

我有一个基于 .NET 2 运行时的应用程序。我想为 .NET 4 添加一点支持,但不想(在短期内)将整个应用程序(非常大)转换为目标 .NET 4。

我尝试了创建应用程序 .config 文件的“明显”方法,具有以下功能:

<startup useLegacyV2RuntimeActivationPolicy="true">
  <supportedRuntime version="v4.0" />
</startup>

但我遇到了一些我注意到的问题here .

我想到了创建一个单独的应用程序域。为了测试它,我创建了一个面向 .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。我在我的代码中做错了什么,还是我试图做的只是不起作用?

谢谢!

最佳答案

您以 2.0 为目标,因此它是加载到内存中的那个……他们要求它加载 4.0 图像……它无法工作,如果您想这样做,您需要旋转正确版本的新运行时实例.

唯一的方法可能是在您的进程中托管第二个 CLR,如 Is it possible to host the CLR in a C program? 中所述。 .Net 4.0 使女巫成为可能。

关于.net - 是否可以在新的应用程序域中加载针对不同 .NET 运行时版本的程序集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2525325/

相关文章:

c# - 使用 .NET 2.0 驱动程序获取 MongoDB Collection 统计信息

.net - 在 ASP.NET 中,如何在单击 gridview 单元格时编辑 gridview 单元格值?

android - 设置安卓 :versionName as reference to string resource leads to NullPointerException under the emulator

ios - 在应用商店中添加一个版本以支持以前版本的 iOS

asp.net - 链接到 Microsoft 编码标准/最佳实践文档?

c# - 我在本地主机上的 ASP.NET Web 服务超时太快

Java 运行时出现垃圾选项错误

django - 在运行时更改 Django 设置

xcode - 强制所有错误显示在 Xcode 中

node.js - 更新部署到 Heroku 的 Meteor 应用程序的 Node 版本