【发布时间】:2010-06-28 18:34:40
【问题描述】:
我们正在使用 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:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\v3.5\System.Web.Routing.dll in Global.asax.cs(15, 43)
此时我意识到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 解决方案项目?
【问题讨论】:
-
不知道该怎么办。我是否需要将我们所有的解决方案都转换为 vs2010 .NET 4.0...?
-
Microsoft 于 2010 年 1 月 13 日上午 8:39 发布您遇到的错误(“此程序集由比当前加载的运行时更新的运行时构建,无法加载”)表明您正在使用 MSBuild 3.5 构建项目。即使您的目标是 3.5 框架,您也应该使用 MSBuild 4.0,因为如错误所示,TFS 构建任务具有 4.0 框架依赖项。 MSBuild 4.0 的多目标功能将确保您的项目仍然是针对适当的框架构建的。
标签: msbuild frameworks build build-process msbuild-4.0