为什么MSBuild ToolsVersion 4.0不能构建旧项目?

时间:2010-06-28 18:34:40

标签: msbuild frameworks build build-process msbuild-4.0

我们正在使用Cruse Control来管理我们的构建过程。 当我们将vs2008项目转换为vs2010时,我们将目标框架设置为3.5,用于Web和类库项目。

此时我们还没有将所有解决方案转换为vs2010;如果我们不必,那就不是。

我最近更新了巡航控制用于指向MSBuild 4.0的MSbuild项目文件,因此我们的构建过程将能够构建vs2010项目。

  

C:\ Windows \ Microsoft.NET \框架\ v4.0.30319 \ MSBuild.exe

在提交针对4.0框架的Web项目之前,一切都很顺利。 此时突然出现此错误:

  

CS0433:类型'System.Web.Routing.RouteCollection'存在于 c:\ Windows \ Microsoft.NET \ assembly \ GAC_32 \ System.Web \ v4.0_4.0.0.0__b03f5f7f11d50a3a Global.asax.cs中的System.Web.dll和c:\ Program Files(x86)\ Reference Assemblies \ Microsoft \ Framework \ v3.5 \ System.Web.Routing.dll(15,43)

此时我意识到Windows/Microsoft.NET/Assembly个文件夹。

现在......所有MSBuild项目,即使他们使用的是MSBuild 4.0,仍然将工具版本设置为3.5。 那么为什么3.5目标构建会查看新的4.0程序集文件夹并发现这种冲突?可能是因为我使用的是MSBuild 4.0。但是如果我可以改变MSBuild使用的工具版本,你会认为我可以告诉它以3.5为目标,而不必担心这些潜在的冲突。

要解决此问题,我转到了巡航控制使用的相关MSBuild项目文件,并将其toolsVersion更改为4.0。这传递了冲突错误。但是现在每当它尝试构建一个我们尚未转换为vs2010项目的解决方案的项目时,它就会出现如下错误:

  SomeFilePath中的

MyProject.csproj:   LC0000:'无法加载文件或程序集或其依赖项之一。此程序集由比当前加载的运行时更新的运行时构建,无法加载。在LC(0,0)

如果我在Visual Studio 2010中打开包含该项目的解决方案并进行转换,构建并提交并强制执行另一个构建,我只会传递该错误,以发现另一个尚未转换的项目正在抛出相同的错误

所以现在我肯定使用MSBuild 4.0并真正定位4.0框架。为什么不能4.0构建3.5项目或vs2008解决方案项目?

1 个答案:

答案 0 :(得分:4)

问题是您已将部分项目迁移到visual studio 2010.任何引用2010项目的2008项目(通过项目引用)都会给您带来编译时错误。尝试将所有.csproj文件更新到2010并再次尝试重建。