使用.NET 4.0编译器编译.NET 3.5项目

时间:2010-10-27 19:25:56

标签: c# .net-3.5 .net-4.0 multi-targeting

我有一个包含多个项目的解决方案。其中一个测试项目由于依赖性而使用.NET 4.0。我想构建的可部署项目是针对.NET 3.5编译器的。我们当前的构建脚本不够精细,无法逐个项目地针对不同的.NET编译器。基本上我只能为解决方案中的每个项目使用一个编译器。

.NET 4.0编译器是否足够智能以编译3.5代码?

解决方案结构

  • Project 1 .NET 3.5(可部署)
  • Project 2 .NET 4.0(用于在自动构建周期中进行测试)

注意: 我不能忽略Project 2,因为我们的自动构建服务器在项目2中运行单元测试。所有测试必须在构建成功之前通过。

编辑:

我没有在Visual Studio中编译此代码。我们有一个在visual studio外部运行的自定义构建脚本。只使用1个.NET编译器就足够聪明了。它使用此编译器来编译给定解决方案中的所有项目。构建脚本不关心项目是否定义为针对3.5或4.0进行编译。相反,它使用定义的编译器编译它们。

项目1未引用项目2.项目2是包含单元测试的项目。我们的自动构建工具仅编译项目2以运行测试。

3 个答案:

答案 0 :(得分:3)

编辑

Op澄清了问题是评论为

  

4.0编译器可以编译3.5项目

答案是肯定的,这是非常可能的。

答案 1 :(得分:2)

右键单击解决方案资源管理器中的“Project 1”项目。然后单击属性(热键是ALT + Enter)。在应用程序选项卡下,有一个“目标框架”下拉列表。将其设置为3.5。

现在编译时(听起来好像使用命令行)使用MSBuild并且不指定目标框架版本。只需编译解决方案文件,每个项目都将正确编译。

答案 2 :(得分:0)

根据您使用的库类型,可能会遇到问题。特别是我遇到了3.5中没有实现的名称空间/类名,这是在4.0中实现的。

如果您正在做一些深奥的事情,比如将NHibernate源代码编译为解决方案的一部分,您将遇到问题。否则,如果您没有踩到任何名称空间,那么将3.5项目编译为4.0应该没有问题。

接受鲍勃的回答有什么问题?您使用的是自定义构建解决方案(即不是Visual Studio)吗?