6

我正在尝试构建大约 600 个项目,有些是 .net 2.0,有些是 3.5。我正在使用带有所有最新 Windows 更新的 Windows 2003 Enterprise Edition 32 位。

当 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% 是项目参考,唯一的二进制参考是核心实用程序库

4

2 回答 2

6

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

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

我还没有找到使用 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>

看起来您至少正确设置了一些参考,因为您收到的错误消息至少有一个调用另一个项目,所以您不需要更新所有内容,只需检查给您的夫妇问题。

于 2008-12-18T17:57:56.047 回答
0

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

于 2010-04-29T17:10:01.570 回答