4

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

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

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


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

4

7 回答 7

6

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

于 2008-09-04T15:03:33.167 回答
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、3.0 和 3.5 的 .NET 2.0 项目

于 2008-09-04T15:03:23.353 回答
0

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

于 2008-09-04T15:04:51.727 回答
0

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

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

于 2008-09-04T15:05:11.040 回答
0

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

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

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

于 2008-09-04T15:05:29.183 回答
0

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

我真的想不出解决方法,抱歉:(

于 2008-09-04T15:06:24.453 回答
0

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

有关创建小型 .NET 安装的更多信息和一般提示,请参阅Scott Hanselman 的这篇出色的博客条目

于 2008-09-04T15:55:14.273 回答