如何将CLR 2应用程序作为CLR 4应用程序运行

时间:2009-05-22 06:43:29

标签: .net clr

假设我有一个旧的应用程序,它将尝试加载外部程序集。

  • 旧应用程序已编译为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 \框架\ 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);

现在有效!

3 个答案:

答案 0 :(得分:8)

您需要提供正确的版本号。请注意,这是beta 1版本,它将更改,直到RTM结算一个:

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

答案 1 :(得分:1)

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

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

答案 2 :(得分:1)

有些人在2013年通过谷歌找到此页面

配置文件要点
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兼容性和性能调整。对于运行托管代码的环境,您应该删除<runtime>部分。