如何根据可用的版本使用 .Net Framework 3.5 或 4.5?

7
我的应用程序使用 .net 3.5,在不做任何修改的情况下可以在 4.5 下编译成功,因此我使用的库既存在于 3.5 版本也存在于 4.5 版本。但是,即使 4.5 可用,windows 8 还是明确要求使用 3.5 版本。
如何(以编程方式)在 Windows7 上运行时使用 3.5,在 Windows8 上运行时使用 4.5?
注:理想情况下,我希望避免使用 app.config 文件。

3
PS: 理想情况下我希望避免使用 app.config 文件。这是为什么呢?因为它正好可以实现你想要的功能(使用 <supportedRuntime>)。 - user743382
1
如果Windows 8 需要 3.5,而你的应用程序已经使用了3.5,那么你为什么还想要使用4.5呢? - Christian Specht
1
Windows 8并没有明确要求3.5,甚至默认情况下都没有安装。但是在“程序和功能”中只需勾选一个复选框,在“Windows安装程序”下面就可以找到它了。针对3.5进行开发是没问题的,但您需要打开该复选框或使用.config文件来告诉.NET在CLR版本4上运行也是可以的。 - Hans Passant
1
@hvd 为了保持应用程序作为单个程序集而没有安装程序,我们做出了努力。 - adentum
1
@ChristianSpecht v3.5在Windows 8上默认未启用,需要先下载并安装。 - adentum
显示剩余4条评论
4个回答

5

我能想到的唯一解决办法,就是同时编译两个框架。然后在安装程序中包含这两个框架,根据系统上的情况来安装正确的框架。


这是一种不需要 app.config 文件的实现方式。但是,如果没有编译时/清单基础的解决方案,我现在将使用 <supportedRuntime version> 元素。感谢您的帮助。 - adentum
请注意,根据此问题中的答案,3.5框架已包含在Windows 8中,但不会自动安装。如果您的程序需要它,它将被安装。 - George Duckett

4
针对应用程序开发人员和IT管理员: IT管理员可以配置.NET 3.5应用程序在.NET 3.5或.NET 4.5上运行(取决于已安装的版本)。为了使托管应用程序在3.5或4.5上运行,只需在应用程序配置文件中添加一个部分。这将确保如果安装了.NET 3.5,则应用程序将在.NET 3.5上运行;否则应用程序将在.NET 4.5上运行。下面提供了配置文件中额外部分的示例:
<configuration>
   <startup>
      <supportedRuntime version="v2.0.50727"/>
      <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5"/>
   </startup>
</configuration>

2

我没有找到一个不需要额外文件依赖的解决方案。但我找到了最简单的方式,使我的.net 3.5应用程序在windows 8上正常工作,那就是创建一个app.config文件(虽然我希望避免这样做),并添加"<supportedRuntime>"元素。

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

配置文件的名称将是什么?我有一个名为mydll.dll的dll。 - Vikram Ranabhatt

0

Win8会检测到需要3.5并无缝提示用户安装。没有必要为了进一步简化而跳过障碍。


1
嗯,我已经测试过一次了,到目前为止失败率达到了100%。安装程序先行。 - Hans Passant
在我的情况下,重要的是让用户免去下载和安装.NET框架的麻烦。 - adentum

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