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

不过,如果我真的编译代码,我将获得一个针对一个运行的可执行文件 特别的 版本。

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


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

有帮助吗?

解决方案

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

其他提示

阅读 ScuttGu 的帖子 VS 2008 多目标支持

我们从VS 2008版本开始的最大变化之一是支持我们所谓的“多目标” - 这意味着Visual Studio现在将支持针对.NET框架的多个版本的目标,而开发人员将能够启动利用新功能Visual Studio提供的不必始终升级其现有项目和部署的应用程序来使用.NET Framework库的新版本。

现在,当您打开现有项目或使用VS 2008创建新项目时,您可以选择要使用的.NET框架的版本 - IDE将更新其编译器和功能集以匹配此功能。除其他外,这意味着将隐藏不适用于该版本的框架的功能,控件,项目,项目图和汇编引用,当您构建应用程序时,您将能够进行编译输出并将其复制到仅安装了.NET框架的较旧版本的计算机上,您会知道该应用程序将起作用。

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

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

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

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

2005 年和 2008 年,是(在 CLR 2.0 上)

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

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

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

我实在想不出解决方法,抱歉:(

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

有关创建小型 .NET 安装的更多信息和一般提示,请参阅此精彩文章 斯科特·汉塞尔曼 (Scott Hanselman) 的博客文章.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top