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

What does 'useLegacyV2RuntimeActivationPolicy' do in the .NET 4 config?

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

0

谷歌搜索给了我一个解决方案,就是把它添加到应用程序配置中:

1
2
3
4
5
<configuration>
  <startup useLegacyV2RuntimeActivationPolicy="true">
    <supportedRuntime version="v4.0"/>
  </startup>
</configuration>

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


经过一段时间(以及更多的搜索),我找到了JomoFisher写的这篇博客。

0

所以看起来运行时加载混合模式程序集的方式已经改变了。我找不到关于这一变化的任何细节,也找不到为什么要这样做。但useLegacyV2RuntimeActivationPolicy属性恢复为clr 2.0加载。


这是我最近写的一个解释,它有助于消除关于这个属性的无效信息。http://www.marklio.com/marklio/permalink,guid,ecc34c3c-be44-4422-86b7-900900e451f9.aspx(互联网存档返回机器链接)

引用最相关的位:

[Installing .NET] v4 is"non-impactful". It should not change the behavior of existing components when installed.

The useLegacyV2RuntimeActivationPolicy attribute basically lets you say,"I have some dependencies on the legacy shim APIs. Please make them work the way they used to with respect to the chosen runtime."

Why don’t we make this the default behavior? You might argue that this behavior is more compatible, and makes porting code from previous versions much easier. If you’ll recall, this can’t be the default behavior because it would make installation of v4 impactful, which can break existing apps installed on your machine.

全文更详细地解释了这一点。在RTM中,有关这方面的msdn文档应该更好。