【问题标题】:What's the difference between using useLegacyV2RuntimeActivationPolicy and multiple supportedRuntimes使用 useLegacyV2RuntimeActivationPolicy 和多个 supportedRuntimes 有什么区别
【发布时间】:2013-05-06 18:16:55
【问题描述】:

以下三种场景(在exe的app.config文件中)有什么区别?

<startup>
  <supportedRuntime version="v4.0" />
  <supportedRuntime version="v2.0" />
</startup>


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


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

我已经阅读了有关它的 MS 文档和一些博客,但我仍然不太清楚到底发生了什么以及何时使用哪个。

编辑
我有一种情况,第三方应用程序是用 CLR 2 编译的(也使用旧版 COM),而我为应用程序所做的允许扩展是用 CLR 4 编译的。所以,重新编译应用程序不是我的选择.我只需要知道这三种情况的影响。

【问题讨论】:

  • 我已经编辑了你的标题。请参阅“Should questions include “tags” in their titles?”,其中的共识是“不,他们不应该”。
  • 第三种方案确实是最好的方案。它有效地解决了问题。做得很好。这影响了我在生产中的一些东西,因此该解决方案帮助我快速修复。

标签: .net clr app-config clr4.0


【解决方案1】:

useLegacyV2RuntimeActivationPolicy 属性有点逃避现实。将其设置为 true 允许 .NET 4 程序加载混合模式 (C++/CLI) 或 [ComVisible] .NET 程序集,这些程序集在注册表中明确声明它们需要运行时版本 2.0.50727。如果您没有这样的程序集,这不会有任何区别,它们相当罕见。明智的做法是不要使用它,当需要它时你会收到一条错误消息。消息如下所示的 FileLoadException:

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

下一步明智的做法是重建此类程序集以 .NET 4 为目标。您要做的最后一件事是使用该属性。

如果您提供多个版本的 CLR,就像您在前两个 sn-ps 中所做的那样,那么您将获得 EXE 在其清单中要求的版本。最后一个强制 v4 版本。这意味着您可能会在不同的 .NET 运行时运行仅在 CLR v2 上测试过的代码。这几乎总会有好的结果,v4 与 v2 非常兼容。但他们确实借此机会修复了 v4 中的错误。您可能会不小心依赖于错误的行为。当然非常罕见。

【讨论】:

  • 程序集不必是ComVisible - 例如,如果加载面向 .NET 3.5 的 C++/CLI 程序集,这也是必需的...
  • 示例是来自/用于 SQL Server 2008 R2 产品的Microsoft.SqlServer.BatchParser.dll。它是针对 .NET 2.0 编译的混合模式程序集,您需要将 useLegacyV2RuntimeActivationPolicy 设置为 true 才能在 .NET 4.0 程序集中使用。
【解决方案2】:

supportedRuntime 指定使用哪个运行时来实际运行和执行应用程序本身。如果将此设置为v4.0,则4.0 clr 运行时将用于启动应用程序。添加v2.0v4.0 表示您将允许CLR 2 或4 运行时实际运行应用程序。

useLegacyV2RuntimeActivationPolicy 选项会更改当您从在 CLR 4 运行时中执行的应用程序中加载面向 CLR 2 运行时的程序集时的行为。当它设置为true 时,4.0 运行时将用于加载 CLR 2 程序集。如果您在 CLR 4 项目中加载针对 CLR 2 的混合模式程序集,这主要是必需的,否则您会收到错误消息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-12-30
    • 2010-09-26
    • 2022-09-27
    • 2010-10-20
    相关资源
    最近更新 更多