【问题标题】:Loading a 3.5 compiled C++/CLI application in .NET 4.0在 .NET 4.0 中加载 3.5 编译的 C++/CLI 应用程序
【发布时间】:2010-03-10 22:31:02
【问题描述】:

我正在尝试在 4.0 CLR 中加载针对 Framework 3.5 编译和定位的混合托管应用程序。

我们在我添加此节点的 .exe 旁边有一个 .config 文件:

<?xml version="1.0"?> 
<configuration>
<startup>
    <supportedRuntime version="v4.0.21006" />
</startup>

不幸的是,应用程序在启动时崩溃了,并带有令人讨厌的调用堆栈。知情人士能否确认,如果为 3.5 编译混合托管应用程序(.exe 是 C++/CLI)将不会在 4.0 中加载?

我正在观看有关并行 CLR 托管的 Channel9 视频,其中一位开发人员似乎暗示是这种情况:

http://channel9.msdn.com/shows/Going+Deep/CLR-4-Side-by-Side-In-Process-What-How-Why/

谢谢!

【问题讨论】:

    标签: .net-4.0 c++-cli


    【解决方案1】:

    如果要在 CLR 4 进程中加载​​ CLR 2 (.NET 3.5) 混合模式程序集,则需要设置 useLegacyV2RuntimeActivationPolicy

    <?xml version="1.0"?>
    <configuration>
      <startup useLegacyV2RuntimeActivationPolicy="true">
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
      </startup>
    </configuration>
    

    没有这个,你会得到一个讨厌的异常。

    【讨论】:

      【解决方案2】:

      您应该能够在同一进程中运行 3.5 和 4.0。但是,强制应用使用 4.0 而不是 3.5 看起来是不可能的。

      你想完成什么?

      【讨论】:

      • CLR 4 确实允许 CLR 2 (.NET 3.5) 和 CLR 4 (.NET 4) 应用程序在同一进程中运行。然而,混合模式组装需要特别小心。
      • 我很想能够在 .NET 4.0 上试用我们的应用程序,而无需修改大量 .vcproj 和 .csproj 文件!在一个理想的世界里,我可以看到我们通过简单地更新 .config 文件在我们的应用程序发布后启用 .NET 4.0 - 并假设没有任何问题。但此时我什至根本无法加载应用程序,即使我“选择加入”。只是想知道其他人是否有运气。
      • @Reed:有了 .NET 3.5 应用程序,您现在可以加载使用 4 的插件。或者您可以将需要两个版本的插件加载到同一个本机应用程序中。但这绝对不同于强制任何代码在不同于其编写目标的 CLR 版本下运行,实际上恰恰相反。
      • 阅读使用LegacyV2RuntimeActivationPolicy。这导致它使用 clr4 中的非标准策略,显式使用 CLR 4 加载 CLR2 程序集(包括混合模式),这是在 CLR 4 中使用混合模式程序集所必需的。
      • 很高兴您能帮助发帖者。在我看来,并排支持的全部目的是避免使用较新的 CLR 版本加载程序集。因此,我不希望付出巨大的努力使 CLR4 与 CLR2 完全兼容。所以只要它可以工作,很好,但是如果你遇到奇怪的故障,请尝试使用程序集设计的 CLR 版本,因为这不会另外阻止使用新的 CLR。​​
      猜你喜欢
      • 1970-01-01
      • 2011-05-01
      • 1970-01-01
      • 2011-08-10
      • 2010-11-20
      • 2011-05-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多