- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在尝试构建大约 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% 是项目引用,唯一的二进制引用是核心实用程序库
最佳答案
为了让 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>
看起来你至少有一些引用设置正确,因为你的错误消息至少有一个调用另一个项目,所以你不需要更新所有内容,只需检查一对给你带来麻烦。
关于c# - MSBuild maxcpucount > 1 导致生成错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/361955/
我正在尝试构建大约 600 个项目,其中一些是 .net 2.0,一些是 3.5。我正在使用 Windows 2003 Enterprise Edition 32 位和所有最新的 Windows 更新
我在 4 核机器上使用 MsBuild。我给出以下命令行来构建属于大型 VC++ 解决方案的 4 个项目(有超过 4 个项目,所有项目都没有相互依赖)。我使用的是 Visual Studio 2008
我正在尝试使用 CruiseControl.NET 和 MSBUILD 来缩短构建时间,并且命令行开关之一 maxcpucount 可用于允许并行进行构建。我们的解决方案有 60 多个项目,因此任何改
我是一名优秀的程序员,十分优秀!