繁体   English   中英

MSBuild maxcpucount> 1导致生成错误

[英]MSBuild maxcpucount > 1 Causes build errors

我正在尝试构建大约600个项目,有些是.net 2.0,有些是3.5。 我正在使用Windows 2003企业版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%是项目引用,唯一的二进制引用是核心实用程序库

为了使MSBuild能够运行多个内核/ cpus,它需要能够事先确定所有依赖项是什么。 通常,这意味着您需要将所有项目都放在一个巨大的解决方案中,并将所有引用设置为项目引用或设置多个解决方案并将它们设置为以正确的顺序构建。

听起来您现在正在运行单个解决方案版本,因此您需要确保所有对其他项目的引用都正确设置为项目引用,而不是文件路径引用。

我还没有找到一个用GUI检查这个的好方法,所以你可能必须卸载并编辑一个不在multicpu中构建的项目文件来查看xml。

项目参考应如下所示:


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

和文件路径引用如下所示:


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

看起来你至少有一些你的参考设置正确,因为你的错误信息至少有一个呼叫到另一个项目,所以你不需要更新一切,只需检查给你的夫妇问题。

我可能会很晚,你可能已经解决了这个问题。 但我遇到了同样的错误,发现这是由于我的一个项目的路径长度太大。 请看这里

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM