Есть ли способ выгрузить или перезагрузить текущую загруженную среду выполнения? - PullRequest
1 голос
/ 14 сентября 2010

С тех пор, как мы начали обновлять некоторые из наших проектов до .NET Framework 4.0, у меня возникало множество проблем, связанных со следующей ошибкой:

Эта сборка построена более поздней версией среды выполнения.чем текущая загруженная среда выполнения и не может быть загружена.

Теперь это происходит с нашим приложением установщика.Установщик просматривает список библиотек DLL и устанавливает необходимые на целевой машине.Каждая сборка загружается в контекст с помощью

Assembly.LoadFile

Первыми сборками в очереди являются 3,5.Как только установщик берет библиотеку 4.0 и пытается загрузить ее с помощью Assembly.LoadFile, я получаю эту ошибку.Кажется, что загрузка первой DLL устанавливает прецедент относительно того, какая «среда выполнения» загружается в данный момент.

Есть ли способ выгрузить эту загруженную в настоящий момент среду выполнения перед обработкой 4.0 DLL, чтобы избежать этой ошибки?

1 Ответ

1 голос
/ 14 сентября 2010

Это будет зависеть от того, какой CLR является исполняемым файлом, который загружает работающие сборки. Если он работает на CLR 2.0, вы не сможете загрузить сборку .NET 4.0. Поэтому убедитесь, что при попытке загрузить сборку .NET 4.0 вы запускаете приложение в CLR 4.0. Вы упоминаете установщик приложения. Есть возможность установить условие запуска для .NET 4.0:

alt text


UPDATE:

Вы также можете принудительно загрузить свой исполняемый файл CLR 4.0, поместив его в файл app.config:

<startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
</startup>

Поскольку CLR 4.0 поддерживает загрузку сборок, скомпилированных с предыдущими версиями, это позволит вам обойти проблему, не перекомпилируя исполняемый файл для .NET 4.0.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...