允许使用.NET 2.0构建的C#应用​​程序在.NET 4.0/4.5上运行

win*_*006 16 .net c# .net-4.0 .net-2.0

我们有一个myapp.exe用.NET 2.0 Framework(VS2005)构建的C#DLL(让我们称它),我们发现我们的应用程序不适用于只安装了.NET 4.0或更高版本的机器.为了让我们的应用程序在.NET 4.0上运行,我myapp.exe.config通过以下文章添加了以下几行:安装.NET Framework V4.0和运行.NET 2.0/3.0/3.5/3.5Sp1应用程序

<startup>
  <supportedRuntime version="v4.0.30319"/>    
</startup>
Run Code Online (Sandbox Code Playgroud)

它正在发挥作用.

然后我看到这篇文章还提到了以下内容(特别是第二段):

现在,我知道您不能只使用3.5 Service Pack 1应用程序并在V4.0 CLR上运行它.它需要V2.0 CLR或使用标记进行重新配置,以便使应用程序在V4.0 CLR上运行,并且弯曲可能是您不想做的事情.

我没有意识到的是,安装.NET 4.0不会安装2.0/3.0/3.5/3.5Sp1应用程序所需的位.它只会安装V4.0 CLR和V4.0程序集,而不是另外安装相当于.NET Framework V3.5 Sp1的程序.因此,您需要自己安装(例如).NET Framework V3.5 Sp1和.NET 4.0

从我的测试来看,这意味着我可以在.NET 4.0上使用.NET 4.0框架(4.0汇编/库)运行我的2.0 C#应用程序,这与文章所说的相矛盾.

或者我在这里遗漏了什么?如果有人能澄清这一点可能会有所帮助.微软并没有真正明确这一点.

Oku*_*ott 10

我引述:

".NET Framework 4向后兼容使用.NET Framework 1.1,2.0,3.0和3.5构建的应用程序.换句话说,使用以前版本的.NET Framework构建的应用程序和组件将在.NET Framework 4."

摘自.NET Framework中的版本兼容性

你对App.config文件有正确的想法,但你真的限制自己的一行.
我可以建议更自由地使用supportedRuntime线吗?

例如:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <startup useLegacyV2RuntimeActivationPolicy="true">
    <supportedRuntime version="v2.0.50727"/>
    <!-- 
    <supportedRuntime version="v3.5"/>  "The .NET Framework version 3.0 and 3.5 use version 2.0.50727 of the CLR."  
    -->
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0,Profile=Client" />
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0" />
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0.1,Profile=Client" />
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0.1" />
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0.2,Profile=Client" />
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0.2" />
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0.3,Profile=Client" />
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0.3" /> 
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
  </startup>
</configuration>
Run Code Online (Sandbox Code Playgroud)

为什么被supportedRuntime version="v3.5"评论出来?请记住,此配置可识别应用程序与哪些版本的公共语言运行时(CLR)兼容.没有3.0或3.5版本的CLR.请参阅.NET Framework版本和依赖项


Ree*_*sey 6

从我的测试来看,这意味着我可以在.NET 4.0上使用.NET 4.0框架(4.0汇编/库)运行我的2.0 C#应用程序,这与文章所说的相矛盾.

可以使用.NET 4程序集在.NET 4上运行应用程序.但是,运行时行为可能会略有变化,因为您不会使用与开发时相同的运行时和框架.我怀疑这篇文章试图建议你不会通过安装4.0来获得完全相同的行为,但是,正如你所见,它应该可行.

这样做可能很好,但如果这将是一个标准的部署选项,我会建议您对应用程序进行全面测试.

  • @ K3rnel31那不是真的.您可以在没有3.5sp1的情况下安装.NET 4 - 例如,Windows 8默认执行此操作..NET 4使用单独的框架/ CLR,而不是更新 - 它是一个新的框架isntall. (6认同)

MJo*_*nas 5

只是为了更简洁一点。在 App.config 中,您显示了对 CLR 的支持。从 .Net v2 开始,只有2 个版本的 CLR。因此,以下内容将为您提供对 .Net v2 及后续版本的支持。确保包含与项目一起构建的 exe.config 文件,否则您可能仍会看到要求安装 .Net 的弹出窗口。

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <startup useLegacyV2RuntimeActivationPolicy="true">
    <supportedRuntime version="v2.0.50727"/>
    <supportedRuntime version="v4.0"/>
  </startup>
</configuration>
Run Code Online (Sandbox Code Playgroud)

要支持 .Net v2 到 v3.5,请使用:

<supportedRuntime version="v2.0.50727"/>
Run Code Online (Sandbox Code Playgroud)

要支持 .Net v4.0 到 4.6,请使用:

<supportedRuntime version="v4.0"/>
Run Code Online (Sandbox Code Playgroud)

可以找到有关配置应用程序以支持 .NET Framework 的更多信息