MSBuild maxcpucount > 1 会导致构建错误。

6
我试图构建大约600个项目,其中一些是.net 2.0,一些是3.5。我正在使用Windows 2003 Enterprise Edition 32位,并安装了所有最新的Windows更新。
当maxcpucount为1时可以成功构建。如果我将其增加以尝试提高性能,则会出现引用错误。当我查看从发生错误的项目引用时,它们似乎应该按顺序构建。
下面我提供了导致构建失败的错误示例。不要拘泥于项目名称或相对路径,因为我已经更改了这些内容,以避免与雇主发生纠纷。
就像相对项目引用在多个核心构建解决方案时无法正确解析一样。
"C:\SVN\MyLibrary\MyLibrary.csproj" (default target) (15) ->
   "C:\SVN\FileProcessor\FileProcessor.csproj" (default target) (17) ->
   (ResolveProjectReferences target) ->
     C:\WINDOWS\Microsoft.NET\Framework\v3.5\Microsoft.Common.targets : warning : The referenced project '..\..\Manager\Manager.csproj' does not exist.


   "C:\SVN\MyLibrary\MyLibrary.csproj" (default target) (15) ->
   "C:\SVN\FileProcessor\FileProcessor.csproj" (default target) (17) ->
   (CoreCompile target) ->
     FileProcessor.cs(18,39): error CS0234: The type or namespace name 'Manager' does not exist in the namespace 'TheNamespace' (are you missing an assembly reference?)

我没有在一个解决方案文件上使用msbuild,而是使用通配符选择所有的csproj文件然后将它们传递给msbuild。对于开发,我们有多个解决方案用于系统不同组件。95% 是项目引用,唯一的二进制引用是核心实用库。

2个回答

6
为了使MSBuild在多个核/ CPU上运行,它需要事先确定所有依赖项。通常这意味着您要么需要将所有项目放在一个巨大的解决方案中,并设置所有引用为项目引用,或者设置多个解决方案并按正确顺序进行构建。
听起来你现在正在运行单个解决方案版本,所以你需要确保所有对其他项目的引用都是正确的项目引用,而不是文件路径引用。
我没有找到一种用GUI检查这个的好方法,所以你可能需要卸载和编辑一个没有在多CPU中构建的项目文件,以查看XML。
项目引用应该像这样:

<ProjectReference Include="..\..\Manager\Manager.csproj">
      <Project>{C0F60D74-3EF9-4B49-9563-66E70D0DDF43}</Project>
      <Name>Manager</Name>
</ProjectReference>

and a filepath reference would look like:


<Reference Include="Manager.dll, Version=2.0.0.0, Culture=neutral, PublicKeyToken=e79aa50eb4f67b0c, processorArchitecture=MSIL">
      <SpecificVersion>False</SpecificVersion>
      <HintPath>....\Manager\Manager.dll</HintPath>
</Reference>

看起来你至少已经正确设置了一些参考文献,因为你的错误信息中至少有一个调用到另一个项目,所以你不需要更新所有内容,只需检查那些给你带来问题的部分即可。


我没有在解决方案文件上使用msbuild。我使用通配符选择所有csproj文件,然后将它们提供给msbuild。对于开发,我们有多个解决方案用于系统不同组件。95%是项目引用,唯一的二进制引用是核心实用库。 - Ryu

0

可能我有些晚了,你也可能已经解决了这个问题。但我也曾卡在同样的错误上,并发现其中一个项目的路径长度太长导致的。请参见这里


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接