2010-10-27 116 views
1

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

.NET 4.0编译器是否足够聪明以编译3.5代码?

溶液结构

  • 项目1 .NET 3.5(部署-能)
  • 计划2 .NET 4.0(用于自动构建循环测试)

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

编辑:

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

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

+1

VS2010没有使用非4的选项。0编译器,即使您以早期的.net版本为目标。 – 2010-10-27 20:05:07

+0

+1这是很好的知道。我想它使用了基于目标的适当编译器。感谢您的信息。 – sgmeyer 2010-10-27 20:11:28

回答

3

编辑

运算澄清的问题是,作为评论

4.0编译器可以编译3.5项目

答案是肯定的,这是很有可能的。

+0

不,我的意思是我们有一个编译脚本来编译解决方案中的所有项目。构建脚本只能针对1个.NET编译器。所以在这种情况下,它将.NET 4.0编译为编译解决方案中的每个项目。此时组件尚未创建。 – sgmeyer 2010-10-27 19:29:56

+0

@sgmeyer,我还是很困惑。你编译所有的东西两次? – JaredPar 2010-10-27 19:31:21

+0

不,我没有两次编译所有东西。我的构建脚本运行一次。我在问是否可以用4.0编译器编译3.5项目。不编译引用3.5程序集的项目。 – sgmeyer 2010-10-27 19:33:15

2

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

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

+0

我没有用Visual Studio编译。第一部分对我没有任何帮助。相反,我正在使用Visual Studio外部的构建脚本进行编译。这由我们的构建团队控制。我想知道这是否可能不修改构建脚本。 – sgmeyer 2010-10-27 19:35:07

+0

您是在Visual Studio中开发吗?如果这样做,我会说,它会更新您的项目文件。然后使用MSBuild编译你的解决方案文件,它会根据项目文件的设置来选择构建每个项目的框架版本。 – Bob 2010-10-27 19:40:16

+0

我正在VS2010中开发。它已经定位在3.5。我可以在VS中编译一切正常。问题在于构建服务器和它用于构建项目的脚本。这就是为什么我想知道.NET 4.0 C#编译器是否会编译.NET 3.5项目。 – sgmeyer 2010-10-27 19:44:40

0

您可能会遇到问题,具体取决于您正在使用的库的类型。特别是,我在3.5中实现的名称空间/类名称在3.5中实现时遇到了问题。

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

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