1

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

在这一点上,我们不会将所有解决方案都转换为 vs2010;如果我们不必这样做,就不会。

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

C:\windows\Microsoft.NET\Framework\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\System.Web.dll 和 c:\ Global.asax.cs(15, 43) 中的 Program Files (x86)\Reference Assemblies\Microsoft\Framework\v3.5\System.Web.Routing.dll

那时我开始意识到这些Windows/Microsoft.NET/Assembly文件夹。

现在......所有的 MSBuild 项目,即使他们使用的是 MSBuild 4.0,仍然将工具版本设置为 3.5。那么为什么 3.5 目标构建查看新的 4.0 程序集文件夹并发现此冲突?可能是因为我使用的是 MSBuild 4.0。但是,如果我可以更改 MSBuild 使用的 toolVersion,您会认为我可以告诉它以 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 解决方案项目?

4

1 回答 1

4

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

于 2010-06-29T15:11:53.790 回答