假设我有一些代码,理论上可以针对任何版本的.net框架进行编译。如果你愿意,可以想想“Hello World”。
但是,如果我实际编译代码,我将获得一个针对一个特定版本运行的可执行文件。
有没有办法安排事情,以便编译的exe只会针对它找到的任何版本运行?我强烈怀疑答案是肯定的,但我很高兴被证明是错的......
答案 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。