Возможно ли загрузить две версии среды выполнения .NET в одном процессе?
-
03-07-2019 - |
Вопрос
Есть два сценария, которые мне нужно прояснить:
Исполняемый файл, скомпилированный с .NET 3.5, должен использовать библиотеку, скомпилированную с .NET 1.1, и библиотека должна выполняться во время выполнения 1.1.
Исполняемый файл, скомпилированный с .NET 1.1, должен использовать библиотеку, скомпилированную с .NET 3.5.
Я не могу найти надежный источник, утверждающий, что невозможно загрузить две версии .NET runtime и документация Microsoft очень расплывчаты по этому вопросу.
Решение
Нет - вы не можете загрузить CLR в один и тот же процесс дважды.Смотрите документацию для CLR-Хостинг
Как и в предыдущих версиях среды выполнения , функция CorBindToRuntimeEx инициализирует среду выполнения.Вы можете выбрать, какую версию среды выполнения загружать, но процесс может размещайте только одну версию.
Другие советы
.NET 4 обещает включить размещение различных версий CLR в одном и том же процессе с помощью В процессе работы Бок о бок.
Для случая № 1, есть ли какая-либо конкретная причина (скажем, критические изменения), которая требует размещения библиотеки во время выполнения 1.1?Можно ли предоставить библиотеку через скомпилированный веб-сервис 1.1 и вместо этого указать исполняемый файл на веб-сервис?(Или какой-то другой метод удаленного взаимодействия, чтобы получить библиотеку в своем собственном процессе?)
Для случая № 2, возможно ли перекомпилировать приложение 1.1 под 2.0 / 3.5, чтобы оно могло находиться в том же процессе?
В любом случае, Роб Уокер прав (и я поддержал) - вы просто не можете разместить 2 версии среды выполнения в одном процессе.Так что вам нужно как-то это обойти.Я бы предположил, что в обоих случаях исходный код должен быть доступен, поэтому должны выполняться перекомпиляция и повторное тестирование.