'useLegacyV2RuntimeActivationPolicy'在.NET 4配置中做了什么?

在将使用SlimDX并因此具有非托管代码的项目转换为.NET 4.0时,我遇到了以下错误:

混合模式程序集是针对运行时版本“v2.0.50727”构建的,无需其他配置信息即可在4.0运行时加载。

谷歌搜索给我的解决方案,这是添加到应用程序配置:

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

我的问题是, useLegacyV2RuntimeActivationPolicy在做什么? 我找不到任何有关它的文档。


经过一段时间(以及更多的搜索),我发现了Jomo Fisher的这篇博客。

最近我们看到的一个问题是,由于支持并行运行时,.NET 4.0已经改变了它绑定到旧的混合模式程序集的方式。 例如,这些程序集是从C ++ CLI编译的程序集。 目前可用的DirectX程序集是混合模式。 如果你看到这样的消息,那么你知道你遇到了这个问题:

混合模式程序集是针对运行时版本“v1.1.4322”构建的,无需其他配置信息即可在4.0运行时加载。

[剪断]

对于应用程序来说,好消息是您可以通过设置app.config标志来选择回退到这些程序集的.NET 2.0时代绑定。

<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(Internet Archive Wayback Machine链接)

引用最相关的位:

[安装.NET] v4是“不具影响力”的。 它不应该在安装时更改现有组件的行为。

useLegacyV2RuntimeActivationPolicy属性基本上让你说,“我对传统的填充API有一些依赖性。 请按照他们习惯的方式按照选定的运行时间工作。“

为什么我们不把它设为默认行为? 你可能会认为这种行为更加兼容,并且使得从以前的版本移植代码变得更容易。 如果您记得,这不会是默认行为,因为它会使v4的安装具有影响力,这可能会破坏您计算机上安装的现有应用程序。

完整的文章更详细地解释了这一点。 在RTM上,MSDN文档应该更好。

链接地址: http://www.djcxy.com/p/29041.html

上一篇: What does 'useLegacyV2RuntimeActivationPolicy' do in the .NET 4 config?

下一篇: How to Chain Commands at a Special PowerShell 4 Command Prompt?