针对多个版本的 .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 错误”