16

我们有一个使用 .NET 2.0 Framework (VS2005) 构建的 C# DLL(我们称之为 DLL myapp.exe),我们发现我们的应用程序无法在仅安装了 .NET 4.0 或更高版本的机器上运行。myapp.exe.config为了让我们的应用程序在 .NET 4.0 上运行,我按照这篇文章安装 .NET Framework V4.0 和运行 .NET 2.0/3.0/3.5/3.5Sp1 应用程序添加了以下几行

<startup>
  <supportedRuntime version="v4.0.30319"/>    
</startup>

它正在工作。

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

现在,我知道您不能只使用 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 框架(4.0 程序集/库)在 .NET 4.0 上运行我的 2.0 C# 应用程序,这与文章所说的相矛盾。

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

4

5 回答 5

10

我引用:

“.NET Framework 4 与使用 .NET Framework 1.1、2.0、3.0 和 3.5 版本构建的应用程序向后兼容。换句话说,使用 .NET Framework 早期版本构建的应用程序和组件将在.NET 框架 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>

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

于 2014-09-19T13:35:09.263 回答
6

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

可以使用 .NET 4 程序集在 .NET 4 上运行您的应用程序。但是,运行时行为总是有可能发生轻微变化,因为您不会使用与开发相同的运行时和框架。我怀疑这篇文章试图暗示您不会通过仅安装 4.0 来获得完全相同的行为,但是,正如您所看到的,它应该可以工作。

这样做可能很好,但如果这将成为标准部署选项,我建议对您的应用程序进行彻底测试。

于 2012-11-19T19:59:18.503 回答
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>

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

<supportedRuntime version="v2.0.50727"/>

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

<supportedRuntime version="v4.0"/>

有关配置应用程序以支持 .NET Framework 的更多信息,请参阅

于 2016-04-20T22:37:59.403 回答
2

来自:微软文档

快照 .net 框架

您可以选择任何 App.config 文件设置。

于 2018-07-20T12:57:23.620 回答
-3

仅将 web.config 设置为 supportedRuntime version="v4.0.30319"/ 是不够的。

您需要在 Visual Studio 中实际打开您的项目,将其目标框架(属性--> 构建)更改为 4.0 - 然后将构建的解决方案重新部署到您的 4.0 客户端。2.0 和 4.0(system.web 等)之间的几个系统程序集有所不同 - 尽管正如前面的答案所建议的那样,已经提供了向后兼容性。

始终如一地为您的客户提供实际的“4.0 兼容”版本的唯一方法是针对 4.0 运行时对其进行编译。这将需要将任何第 3 方开源库也升级到其 4.0 版本。

于 2013-11-21T19:18:41.393 回答