针对多个.NET Framework版本进行定位

4
假设我有一些代码,理论上可以编译成任何版本的 .net framework。比如说像是 "Hello World"。
但实际上,如果我真的编译这段代码,我会得到一个只能在特定版本下运行的可执行文件。
有没有什么方法可以让编译后的可执行文件运行在它找到的任何版本下?我强烈怀疑答案是否定的,但如果有人能证明我错了,我会很高兴的...
编辑:哇塞,我没想到以后的框架居然可以愉快地运行在早期版本下编译的可执行文件。谢谢大家的回复!
7个回答

6

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


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

3

阅读ScuttGu的文章,了解关于VS 2008多目标支持的内容。

从VS 2008版本开始,我们正在进行一项重大更改,即支持我们所谓的“多目标”——这意味着Visual Studio现在将支持针对多个版本的.NET Framework进行开发,并且开发人员将能够开始利用Visual Studio提供的新功能,而无需始终升级其现有项目和部署的应用程序以使用新版本的.NET Framework库。

现在,当您打开现有项目或使用VS 2008创建新项目时,您可以选择要使用的.NET Framework版本,IDE将更新其编译器和功能集以匹配此版本。其中,这意味着不适用于该版本框架的功能、控件、项目、项目模板和程序集引用将被隐藏,当您构建应用程序时,您将能够获取已编译的输出并将其复制到仅安装了旧版本.NET Framework的计算机上,您将知道该应用程序将正常工作。

这样,您就可以使用VS2008开发.NET 2.0项目,该项目将在.NET 2.0、3.0和3.5上运行。


0

除了多目标之外,这些框架还具有向后兼容性,因此编译为1.0的内容可以在1.1和2上运行。编译为1.1的内容可以在2上运行...等等。


0

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

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


0

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

对于2003,不行...因为它编译成CLR 1.1

你可以理论上编写一些代码使用#if (DOTNET35)等,这样你就不会使用编译器不知道的功能,然后在应用程序上运行所需的编译器...但我对此的有用性表示怀疑。


0

据我所知,所有的.NET版本(除了1.x版本)都编译为相同的字节码。就C#而言,所有的新功能只是语法糖,编译时会转换成C# 2.0结构。

事情可能会出错的关键点在于当你使用C# 3.0或3.5特定的DLL时。它们与.NET 2.0框架不兼容,因此您不能使用这些东西。

对于这个问题,我真的想不到解决办法,抱歉:(


0
关于用户安装的.NET框架,.NET 3.5 SP1还提供了一个新选项——客户端配置文件。这个选项基本上允许您发布一个小型(277k)引导程序,该程序会下载并安装所需的文件(完整.NET框架的子集)。
如需更多信息以及有关创建小型.NET安装的一般提示,请参阅Scott Hanselman的博客文章

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