针对.net框架的多个版本

时间:2008-09-04 15:00:35

标签: .net compilation version

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

但是,如果我实际编译代码,我将获得一个针对一个特定版本运行的可执行文件。

有没有办法安排事情,以便编译的exe只会针对它找到的任何版本运行?我强烈怀疑答案是肯定的,但我很高兴被证明是错的......


编辑:好吧,我会去楼梯脚下。我不知道以后的框架会很乐意运行在早期版本下编译的exe。感谢所有回复!

7 个答案:

答案 0 :(得分:6)

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

答案 1 :(得分:3)

阅读ScuttGu关于VS 2008 Multi-Targeting Support

的帖子
  

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

     

现在打开现有项目时   或者用VS 2008创建一个新的   可以选择哪个版本的.NET   使用的框架 - 和IDE   将更新其编译器和   功能设置与此匹配。其中   其他的东西,这意味着   功能,控件,项目,   item-templates和assembly   不适用的参考文献   该框架的版本将是   隐藏,当你建立你的   应用程序,你将能够采取   编译输出并将其复制到   只有旧版本的机器   安装的.NET Framework,以及   你会知道申请会   工作

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

答案 2 :(得分:0)

沿着多目标,框架是向后兼容的,因此编译为1.0的内容将在1.1和2上运行。在1.1上编译的内容将在2 ...等运行。

答案 3 :(得分:0)

我知道{。3}}在.Net类库方面是正确的。您可以针对.Net 1.1编译类库,然后在.Net 2.0或更高版本的项目中使用它。

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

答案 4 :(得分:0)

with 2005& 2008年,是(关于CLR 2.0)

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

理论上你可以使用#if(DOTNET35)编写一些代码,这样你就不会使用编译器知识以外的功能,然后在应用程序上运行所需的编译器......我对此问题的实用性提出质疑。 / p>

答案 5 :(得分:0)

好吧,AFAIK,所有.NET版本(版本1.x除外)都编译为相同的字节码。在C#的情况下,所有新功能都只是语法糖,在编译时会转换为C#2.0构造。 事情可能出错的关键是你使用C#3.0或3.5特定的DLL。它们与.NET 2.0框架不兼容,因此您无法使用它们。

我真的不能想到一个解决方法,对不起:(

答案 6 :(得分:0)

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

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