Чем могут отличаться версия сборки сборки и версия времени выполнения? - PullRequest
4 голосов
/ 12 января 2011

У меня есть решение на C #, два проекта, winforms и dll, где проект winforms ссылается на dll, и я установил все, что знаю в проекте, на версию 2.0 фреймворка, но я все еще получаю этоFileLoadException при запуске:

Сборка смешанного режима построена для версии 'v2.0.50727' среды выполнения и не может быть загружена в среде выполнения 4.0 без дополнительной информации о конфигурации.

Я настроил следующие параметры:

  • Свойства - Целевая платформа - это .NET Framework 2.0
  • Все ссылки, на которые ссылается проект, созданы на основе .NET 2.0
  • Все флажкив диспетчере конфигурации указано, должны ли проверяться проекты.

Также я попытался очистить решение, удалив проект карты \ bin \, но когда решение перекомпилировано и запущено,исключение все еще выброшено.На моей машине установлена ​​Visual Studio 2010 Ultimate с установленными .NET 4.0 и .NET 3.5 SP1.

Я, должно быть, пропустил настройку, которая вызывает это исключение, но я не знаю об этом, кто-нибудь знает?Я просто хочу использовать .NET 2.0, а не .NET 4.0.

Ответы [ 2 ]

4 голосов
/ 12 января 2011

Чтобы попытаться принудительно загрузить его в CLR 2.x, вам может понадобиться (в файле app.config):

<configuration>
  <startup>
    <supportedRuntime version="v2.0.50727"/>
  </startup>
</configuration>

Обычно это требуется только в смешанном режиме.и заставляет руку погрузчика.

1 голос
/ 12 января 2011

Ну, он работает под управлением 4.0 CLR, несмотря на ваши усилия по достижению 2.0. Он жалуется на сборку C ++ / CLI, предположительно DLL, на которую вы ссылались. Файл .config необходим для того, чтобы убедить CLR, что для загрузки этой DLL можно использовать .NET 4.0, даже если он может содержать неуправляемый код, который предполагает использование 2.0, google "useLegacyV2RuntimeActivationPolicy". Это решило бы проблему загрузки 4.0 для этой DLL.

Единственная другая причина, по которой он все еще может загрузить 4.0, - это файл .config, в котором говорится, что он должен использовать элемент 4.0, <supportedRuntime>. Чтобы сделать это более наглядным, вы можете использовать инструмент Fuslogvw.exe, настроить его для регистрации всех привязок. Скопируйте / вставьте трассировку привязки для вашего EXE-файла в ваш вопрос, если вы не можете понять это.

...