Что делает 'useLegacyV2RuntimeActivationPolicy' в конфигурации .NET 4?

StackOverflow https://stackoverflow.com/questions/1604663

Вопрос

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

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

Поиск в Google дал мне решение, которое заключается в добавлении этого в конфигурацию приложений:

<configuration>
  <startup useLegacyV2RuntimeActivationPolicy="true">
    <supportedRuntime version="v4.0"/>
  </startup>
</configuration>

Мой вопрос в том, что такое useLegacyV2RuntimeActivationPolicy делаешь?Я не могу найти никакой документации по этому поводу.

Это было полезно?

Решение

Спустя некоторое время (и еще больше поисков) я нашел эта запись в блоге автор: Джомо Фишер.

Одна из недавних проблем, с которыми мы столкнулись, заключается в том, что из-за поддержки параллельных сред выполнения .NET 4.0 изменила способ привязки к старым сборкам со смешанным режимом.Такими сборками являются, например, те, которые компилируются из C ++\CLI.Доступные в настоящее время сборки DirectX работают в смешанном режиме.Если вы видите подобное сообщение, значит, вы столкнулись с проблемой:

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

[Отрывок]

Хорошей новостью для приложений является то, что у вас есть возможность вернуться к привязке к эпохе .NET 2.0 для этих сборок, установив флаг app.config следующим образом:

<startup useLegacyV2RuntimeActivationPolicy="true">
  <supportedRuntime version="v4.0"/>
</startup>

Таким образом, похоже, что способ загрузки во время выполнения сборок в смешанном режиме изменился.Я не могу найти никаких подробностей об этом изменении или о том, почему это было сделано.Но тот useLegacyV2RuntimeActivationPolicy атрибут возвращается к загрузке CLR 2.0.

Другие советы

Вот объяснение, которое я недавно написал, чтобы помочь с отсутствием информации об этом атрибуте. http://www.marklio.com/marklio/PermaLink,guid,ecc34c3c-be44-4422-86b7-900900e451f9.aspx (ссылка на механизм возврата в интернет-архив)

Чтобы процитировать наиболее подходящие биты:

  

[Установка .NET] v4 является & # 8220; без последствий & # 8221 ;. Он не должен изменять поведение существующих компонентов при установке.

     

Атрибут useLegacyV2RuntimeActivationPolicy в основном позволяет сказать: «У меня есть некоторые зависимости от устаревших API-интерфейсов shim. Пожалуйста, заставьте их работать так, как они привыкли в отношении выбранной среды выполнения. & # 8221;

     

Почему мы не устанавливаем это поведение по умолчанию? Вы можете утверждать, что это поведение более совместимо и значительно упрощает перенос кода из предыдущих версий. Если вы помните, это не может быть поведением по умолчанию, поскольку это может повлиять на установку v4, что может привести к поломке существующих приложений, установленных на вашем компьютере.

Полный пост объясняет это более подробно. В RTM документы MSDN по этому вопросу должны быть лучше.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top