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

Cam*_*and 209 .net mixed-mode app-config .net-4.0

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

混合模式程序集是针对运行时的版本"v2.0.50727"构建的,如果没有其他配置信息,则无法在4.0运行时加载.

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

<configuration>
  <startup useLegacyV2RuntimeActivationPolicy="true">
    <supportedRuntime version="v4.0"/>
  </startup>
</configuration>
Run Code Online (Sandbox Code Playgroud)

我的问题是,做了useLegacyV2RuntimeActivationPolicy什么?我找不到任何关于它的文档.

Cam*_*and 164

经过一段时间(以及更多的搜索),我发现了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>
Run Code Online (Sandbox Code Playgroud)

所以它看起来像运行时加载混合模式程序集的方式已经改变.我找不到有关此更改的任何详细信息,或者为什么会这样做.但该useLegacyV2RuntimeActivationPolicy属性恢复为CLR 2.0加载.

  • 值得注意的是,同时marklios回答(http://stackoverflow.com/questions/1604663/what-does-uselegacyv2runtimeactivationpolicy-do-in-the-net-4-config/2467255#2467255)提供了他的详尽解释的链接关于这个变化. (28认同)

小智 125

这是我最近写的一个解释,用于帮助解决此属性的无效信息. http://www.marklio.com/marklio/PermaLink,guid,ecc34c3c-be44-4422-86b7-900900e451f9.aspx(Internet Archive Wayback Machine link)

引用最相关的位:

[安装.NET] v4是"无影响的".它不应该在安装时更改现有组件的行为.

useLegacyV2RuntimeActivationPolicy属性基本上允许您说,"我对遗留填充程序API有一些依赖性.请使它们按照以前的方式运行,以适应所选的运行时."

为什么我们不将它作为默认行为?您可能会认为此行为更兼容,并且可以更轻松地移植以前版本的代码.如果您还记得,这可能不是默认行为,因为它会使v4的安装受到影响,这可能会破坏计算机上安装的现有应用程序.

完整的帖子更详细地解释了这一点.在RTM上,关于此的MSDN文档应该更好.