针对多个版本的 .net 框架

Posted

技术标签:

【中文标题】针对多个版本的 .net 框架【英文标题】:Targeting multiple versions of .net framework 【发布时间】:2010-09-07 19:41:37 【问题描述】:

假设我有一些代码,理论上可以针对任何 版本的.net 框架进行编译。如果你愿意,想想“Hello World”。

如果我真的编译代码,我会得到一个针对一个特定版本运行的可执行文件。

有什么办法可以让编译后的 exe 只针对它找到的任何版本运行?我强烈怀疑答案是否定的,但我很乐意被证明是错误的......


编辑:好吧,我会去我们的楼梯脚下。我不知道后来的框架会愉快地运行在早期版本下编译的 exe。感谢大家的回复!

【问题讨论】:

【参考方案1】:

关于用户安装了哪个 .NET 框架,还有一个新选项,即客户端配置文件可用于 .NET 3.5 SP1。这基本上允许您发布一个小型 (277k) 引导程序,该程序下载并安装所需的文件(完整的 .NET 框架的子集)。

有关创建小型 .NET 安装的更多信息和一般提示,请参阅这个伟大的 blog entry by Scott Hanselman。

【讨论】:

【参考方案2】:

好吧,AFAIK,所有 .NET 版本(1.x 版除外)都编译为相同的字节码。对于 C#,所有新功能都只是语法糖,在编译时会转换为 C# 2.0 结构。 当您使用 C# 3.0 或 3.5 特定的 DLL 时,可能出现问题的关键点。它们不适用于 .NET 2.0 框架,因此您不能使用它们。

我实在想不出解决办法,抱歉:(

【讨论】:

【参考方案3】:

对于 2005 和 2008,是的(在 CLR 2.0 上)

在 2003 年,没有.. 因为它编译到 CLR 1.1

理论上,您可以使用#if (DOTNET35) 等编写一些代码,这样您就不会使用编译器知识之外的功能,然后在应用程序上运行所需的编译器...不过我质疑这样做的用处。

【讨论】:

【参考方案4】:

我知道@John Boker 对于.Net 类库是正确的。您可以针对 .Net 1.1 编译一个类库,然后在 .Net 2.0 或更高版本的项目中使用它。

我怀疑对于可执行文件也是如此。

【讨论】:

【参考方案5】:

除了多目标之外,这些框架是向后兼容的,因此编译为 1.0 的东西将在 1.1 和 2 上运行。在 1.1 上编译的东西将在 2 上运行......等等。

【讨论】:

【参考方案6】:

我不确定这是否正确,但我会尝试为最低版本编译它,较高版本应该能够运行较低版本的 exe。

【讨论】:

如果我想利用较新框架版本的某些功能,但仍让程序在旧版本上运行,该怎么办?在这种情况下,正确的做法是什么? 可能并非总是如此。出于同样的原因,我为 .NET 2.0 构建了一个 Windows 服务,但是默认情况下,Windows 8.0+ 没有安装 2.0-3.5(需要从“添加或删除功能”中激活)。【参考方案7】:

阅读 ScuttGu 关于VS 2008 Multi-Targeting Support 的帖子

我们正在做出的重大改变之一 从 VS 2008 版本开始是 支持我们所说的 “多目标” - 这意味着 Visual Studio 现在将支持 针对多个版本的 .NET 框架,开发人员将 能够开始利用 Visual Studio 提供的新功能 无需总是升级他们的 现有项目和部署 应用程序使用新版本 .NET Framework 库。

现在,当您打开现有项目时 或者用VS 2008创建一个新的,你 可以选择 .NET 的哪个版本 使用的框架 - 和 IDE 将更新其编译器和 功能集以匹配此。之中 其他事情,这意味着 功能,控件,项目, 项目模板和程序集 不适用的参考 框架的版本将是 隐藏,当你建立你的 应用程序,您将能够参加 编译输出并将其复制到 只有旧版本的机器 已安装的 .NET Framework,以及 你会知道该应用程序将 工作。

这样您就可以使用 VS2008 开发适用于 .NET 2.0、3.0 和 3.5 的 .NET 2.0 项目

【讨论】:

以上是关于针对多个版本的 .net 框架的主要内容,如果未能解决你的问题,请参考以下文章

为啥安装 .NET Framework 4.51 会导致针对框架版本 4 的应用程序中出现“Microsoft.SqlServer.Types 错误”

为啥默认的 mvc6 模板针对多个 DNX 版本?

为啥我的 .net 项目针对 .net framework 3.5 的 System.dll 版本是 2.x?

如何使用 .NET 4 运行时运行 PowerShell?

ASP.NET Core框架揭秘(持续更新中…)

RDIFramework.NET平台代码生成器V3.0版本全新发布-更新于20160518(提供下载)