【问题标题】:How to run CLR 2 application as CLR 4 application如何将 CLR 2 应用程序作为 CLR 4 应用程序运行
【发布时间】:2013-01-15 09:06:56
【问题描述】:

假设我有一个旧应用程序会尝试加载外部程序集。

  • 旧应用程序编译为 CLR 2。
  • 新程序集编译为 CLR 4。

我希望能够在 CLR 4 中运行那个旧应用程序。我记得其中涉及到一些 xml manifest magic

如何创建该清单 xml 文件以告知 oldapplication.exe 应在 CLR 4 下运行?

我找到了一些建议,但它们似乎对我不起作用。

oldapplication.exe.config:

<?xml version ="1.0"?>
<configuration>
 <startup>
      <!--set the appropriate .net version-->
      <requiredRuntime version="4.0.0.0"/>
 </startup>
</configuration>

在再试一次的时候,我发现这个文件可以作为我的模板:

C:\Windows\Microsoft.NET\Framework\v4.0.20506\Aspnet_regsql.exe.config

<?xml version ="1.0"?>
<configuration>
    <startup>
        <supportedRuntime version="v4.0.20506"/>
        <requiredRuntime version="v4.0.20506" safemode="true"/>
    </startup>
</configuration>

我还更新了代码以报告当前的 CLR:

Console.WriteLine(typeof(object).Assembly.ImageRuntimeVersion);

现在可以了!

【问题讨论】:

  • +1。我也想问这个,因为我真的需要 .NET 4 的 64 位 JIT 来获得适当的尾调用支持。

标签: .net clr


【解决方案1】:

您需要提供正确的版本号。请注意,这是 beta 1 版本,它会在 RTM 解决之前发生变化:

<configuration>
 <startup>
      <supportRuntime version="4.0.20506"/>
 </startup>
</configuration>

【讨论】:

    【解决方案2】:

    我相信你想使用supportedRuntime,而不是requiredRuntime。

    元素应该由使用 1.1 版或更高版本的运行时构建的所有应用程序使用。” (http://msdn.microsoft.com/en-us/library/a5dzwzc9.aspx)。请确保版本字符串与所需版本的“安装文件夹名称”完全匹配。

    【讨论】:

      【解决方案3】:

      对于 2013 年以上通过 Google 找到此页面的人

      配置文件要点
      https://gist.github.com/1223509

      博文
      http://yzorgsoft.blogspot.com/2011/09/greenshot-on-windows-8-net-45.html

      <?xml version ="1.0"?>
      <configuration>
        <startup useLegacyV2RuntimeActivationPolicy="true">
          <supportedRuntime version="v4.0.30319" />
          <requiredRuntime version="v4.0.30319" safemode="true"/>
        </startup>
        <runtime>
          <relativeBindForResources enabled="true" />
          <UseSmallInternalThreadStacks enabled="true" />
          <DisableMSIPeek enabled="true"/>
        </runtime>
      </configuration>
      

      此配置文件是从 Visual Studio 2012 中提取的,因此它有一些额外的 COM 兼容性和性能调整。对于运行托管代码的环境,您可能应该删除 &lt;runtime&gt; 部分。

      【讨论】:

        猜你喜欢
        • 2010-09-16
        • 2020-11-13
        • 1970-01-01
        • 2012-09-28
        • 2022-09-24
        • 2010-11-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多