.net - совместимость - все версии net framework




Что делает «useLegacyV2RuntimeActivationPolicy» в конфигурации.NET 4? (2)

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

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

Googling вокруг дал мне решение, которое должно добавить это в конфигурацию приложений:

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

Мой вопрос: что такое useLegacyV2RuntimeActivationPolicy ? Я не могу найти документацию об этом.


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

Для цитирования наиболее релевантных бит:

[Установка .NET] v4 является «недействительной». При установке не следует изменять поведение существующих компонентов.

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

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

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


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

Одна из недавних проблем, которые мы видели, заключается в том, что из-за поддержки одновременной работы в среде .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.







mixed-mode