gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 23:29:34 24 4
gpt4 key购买 nike

我有一个基于 .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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com