一次编译为两个 .NET Framework

Posted

技术标签:

【中文标题】一次编译为两个 .NET Framework【英文标题】:Compile to two .NET Frameworks at once 【发布时间】:2011-09-16 11:15:31 【问题描述】:

我有一个 C# 程序,我想让它编译成两个不同的 .NET Framework 版本。

所以当我按下编译按钮时,它会生成例如“ComputerInfo3.exe”和“ComputerInfo4.exe”。

我想使用 .NET Framework 3.5 和 4 版。我使用 Visual Studio 和 C#。这可能吗?

【问题讨论】:

为什么人,为什么?如果您的代码在 3.5 中编译,这意味着您不使用任何 4.0 功能。那为什么要以 4.0 为目标呢? 这有合法的用途。图书馆这样做。对于图书馆的消费者来说,这不那么令人头疼。我承认这不是他正在做的事情,但是回答这个问题对我个人很有用。 有同样的问题,对我来说,这就是我正在构建的应用程序只需要 .NET 2(我用它来获得最广泛的受众)的原因,我想要另一个版本能够提交到英特尔的 AppUp.com 平台,该平台仅允许 .NET 3.5 应用程序。 我相信c-conditional-compilation-and-framework-targets 是一个更好的答案。 【参考方案1】:

最好的办法是创建两个单独的 csproj 文件,一个针对 3.5,一个针对 4.0,并将它们包含在同一个解决方案中。您可以将一个项目中的所有文件添加到另一个项目。如果您link the file,而不是常规添加,那么您在文件中所做的任何更新都将应用于这两个项目。

如果您尝试将项目放在同一位置,您很可能会遇到问题,因为 Visual Studio 如何维护临时构建文件。因此,您需要将它们保存在单独的文件夹中。

最后,如果您构建一个面向 3.5 的可执行文件,那么它可以在 .NET 4 上按原样运行。因此,通常您不需要构建两个版本的 EXE。

【讨论】:

出色的答案。非常感谢,因为它让我在尝试以更复杂的方式做事时省了很多心痛。【参考方案2】:

您也可以使用nAnt 进行自动化构建,然后您可以配置多个目标,每个目标对应一个框架

【讨论】:

以上是关于一次编译为两个 .NET Framework的主要内容,如果未能解决你的问题,请参考以下文章

宋宗元

Wdb开发乱码总结篇

jvm原理和代码运行的过程

将 C# .net 4 代码编译为 .net 3.5?

第四次作业

为啥编译为 x86 的 .NET EXE 会以 x64 运行?