在.NET 4.0运行时上运行.NET 3.5应用程序

5

如果我构建的应用程序是针对 .net 3.5 版本的,那么如果用户只安装了 .net 4.0,它能否运行?提供一份官方的 MSDN 文档链接可以让我放心。


1
在这种情况下,请记住,即使是链接到官方MSDN文档也不能替代实际测试。理论上的兼容性并不一定等同于实际结果。 - Cody Gray
1
谢谢大家。给你们点个赞。非常好的回答。我爱 stack overflow。 - basarat
3个回答

15

可以,你可以在你的app.config文件中声明支持.NET 4:

<configuration>
  <startup>
    <supportedRuntime version="v4.0" /> 
  </startup>
</configuration>

请注意,框架的更改可能会破坏您的应用程序。有关详情,请参阅MSDN的.NET 4迁移问题列表,其中包括推荐的更改。

如果您仍希望支持仅安装了.NET 3.5的用户,还需要添加一个<supportedRuntime version="v2.0.50727" />元素:

<configuration>
  <startup>
    <supportedRuntime version="v4.0" /> 
    <supportedRuntime version="v2.0.50727" /> 
  </startup>
</configuration>
请注意,上述配置会偏向于 .NET 4.0(如果已安装)。如果更改顺序,应用程序会偏向于 .NET 3.5(如果已安装)。完整的可能配置及其影响表格可以在 MSDN 的有关配置您的应用程序以支持 .NET 4.0 或 4.5的教程中找到。

谢谢,这正是我需要做的。不过大家都给了很好的答案。你也是秒回的,哈哈 :) +1。非常感谢。 - basarat
如果只安装了3.5版本,那该怎么办?我认为你应该在 <supportedRuntime version="v4.0" /> 之前添加 <supportedRuntime version="v2.0.50727"/> (如果两个版本都安装了,这样可以优先使用3.5版本)。例如,请参见 http://stackoverflow.com/a/11211795/67824 - Ohad Schneider
是的,根据@OhadSchneider的评论,如果您想在仅安装了3.5的计算机上运行应用程序,则必须添加<supportedRuntime version="v2.0.50727" />元素。有关配置应用程序以支持.NET 4.0或4.5的所有可能设置和效果的完整概述,请参见此文章中的表格 - Håvard S
@HåvardS 最好编辑你的回答,我怀疑很多人不希望他们编译在3.5版本下的程序在只安装了3.5版本的系统中无法运行。 - Ohad Schneider
顺便说一下,您可以为现有程序添加清单(如果它们尚未包含在资源中)。例如,有一个名为winzpaq.exe的程序,默认情况下尝试在.NET 3.5上运行。添加具有上述内容的winzpaq.exe.config文件可允许在4.0及以上版本上运行它 :) - LogicDaemon

6

正是我所需要的。具体来说,“默认情况下,应用程序运行在其构建的 .NET Framework 版本上。如果该版本不存在,并且应用程序配置文件未定义支持的版本,则可能会发生 .NET Framework 初始化错误。在这种情况下,尝试运行应用程序将失败。”大家都很有帮助,但我只能标记一个为接受的答案。 - basarat

1

MSDN

这很重要:“.NET Framework 4 与使用早期 .NET Framework 版本构建的应用程序高度兼容,除了一些为提高安全性、标准合规性、正确性、可靠性和性能而进行的更改。”


1
从您的链接中,我找到了我需要的内容:“.NET Framework 4不会自动使用其版本的公共语言运行时来运行使用早期版本的.NET Framework构建的应用程序。要使用.NET Framework 4运行旧应用程序,必须在Visual Studio项目属性中指定目标.NET Framework版本编译应用程序,或者可以在应用程序配置文件中使用<supportedRuntime>元素指定支持的运行时。”但是只能有一个被接受的答案。无论如何,+1。 - basarat

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接