【问题标题】:What does 'useLegacyV2RuntimeActivationPolicy' do in the .NET 4 config?.NET 4 配置中的“useLegacyV2RuntimeActivationPolicy”有什么作用?
【发布时间】:2010-12-08 22:43:09
【问题描述】:

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

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

谷歌搜索给了我解决方案,即将它添加到应用程序配置中:

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

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

【问题讨论】:

    标签: .net .net-4.0 app-config mixed-mode


    【解决方案1】:

    经过一段时间(以及更多搜索)后,我找到了 Jomo Fisher 的 this blog entry

    我们最近看到的一个问题是,由于支持并行运行时,.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 加载。

    【讨论】:

    • 值得注意的是,与此同时,marklios 的回答 (stackoverflow.com/questions/1604663/…) 提供了一个链接,指向他对这一变化的详尽解释。
    • 对此的详尽解释可以在MSDN上找到(虽然没有明确提到上面提到的解决方案):msdn.microsoft.com/en-us/magazine/ee819091.aspx
    • 如果我将它添加到我的应用程序的配置和我的 UnitTest 项目的配置中,并且在运行测试时仍然收到文件加载错误,该怎么办。我应该发布一个新问题吗?
    【解决方案2】:

    这是我最近写的一个解释,以帮助解决有关此属性的信息的空白。 http://www.marklio.com/marklio/PermaLink,guid,ecc34c3c-be44-4422-86b7-900900e451f9.aspx(Internet Archive Wayback Machine 链接)

    引用最相关的位:

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

    useLegacyV2RuntimeActivationPolicy 属性基本上可以让您说:“我对旧版 shim API 有一些依赖项。请让它们在选择的运行时按照他们过去的方式工作。”

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

    完整的帖子更详细地解释了这一点。在 RTM,这方面的 MSDN 文档应该会更好。

    【讨论】:

    • user20493,您能否运行您的应用程序并将环境变量 COMPlus_CLRLoadLogDir 设置为应用程序具有写入权限的空目录并共享生成的日志(请在共享之前清理任何 PII)。它可能有助于解释正在发生的事情。 config 属性可能不适用于您的应用运行的上下文。
    • 此链接还应帮助您了解问题所在以及解决方案对您的作用:msdn.microsoft.com/en-us/magazine/ee819091.aspx
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-02
    • 1970-01-01
    • 1970-01-01
    • 2012-03-03
    • 1970-01-01
    相关资源
    最近更新 更多