1

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

.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 以运行测试。

4

3 回答 3

3

编辑

Op澄清了问题是评论为

4.0的编译器能不能编译出3.5的项目

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

于 2010-10-27T19:27:37.990 回答
2

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

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

于 2010-10-27T19:29:11.467 回答
0

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

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

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

于 2010-10-27T19:35:32.340 回答