У меня есть приложение, основанное на среде выполнения .NET 2. Я хочу добавить немного поддержки .NET 4, но не хочу (в краткосрочной перспективе) преобразовывать все приложение (которое очень велико) в целевую .NET 4.
Я попробовал «очевидный» подход к созданию файла .config приложения, имеющего следующее:
<startup useLegacyV2RuntimeActivationPolicy="true">
<supportedRuntime version="v4.0" />
</startup>
но я столкнулся с некоторыми проблемами, которые я отметил здесь.
У меня возникла идея создать отдельный домен приложения. Чтобы проверить это, я создал проект WinForm, ориентированный на .NET 2. Затем я создал библиотеку классов, ориентированную на .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>
К сожалению, это вызывает исключение BadImageFormatException при выполнении dotNet4AppDomain.Load. Я что-то делаю неправильно в своем коде, или то, что я пытаюсь сделать, просто не сработает?
Спасибо!