Вот ужасная идея (это настолько плохая идея, что я бы уволил меня, если бы предложил).
Возможно, вы сможете принудительно запустить приложение в .Net 4 CLR с помощью приложения-загрузчика.
Приложение-загрузчик должно быть исполняемым .Net 4, которое ничего не делает, кроме как загружает исполняемую сборку приложения, находит точку входа в программу и выполняет ее. Поскольку сборки .Net 2 являются допустимыми 4 сборками, он не должен работать без проблем, но затем должен поддерживать плагины .Net 4.
Обновление:
Я запустил быструю тестовую версию, и она, по крайней мере, может работать. Вот исходный код для программы-загрузчика. Мое приложение .Net 2.0 было названо «App20.exe», замените ваше собственное имя там.
using System;
using System.Reflection;
using System.IO;
namespace Loader
{
class Program
{
static void Main(string[] args)
{
string oldAppName = Path.GetFullPath("App20.exe");
Assembly asm = Assembly.LoadFile(oldAppName);
Console.WriteLine(asm.EntryPoint.Name);
asm.EntryPoint.Invoke(null, new object[]{args});
}
}
}