繁体   English   中英

Visual Studio 2012 C#解决方案,并行构建竞争条件

[英]Visual Studio 2012 C# solution, parallel build race condition

我有一个Visual Studio 2012 C#解决方案,其中包含大约15个.csproj项目。

每个项目都使用在启动构建之前生成的通用foo/bar.cs文件。

我尝试了各种方法:

  • 预建活动
  • 自定义MSBuild的BeforeBuild目标

单独构建每个项目都可以。 但是,一旦我使用“构建解决方案”,我就面临一个竞争条件:其中的一个目标试图在另一个目标重新创建foo/bar.cs时对其进行编译。

到那时,我意识到使用“生成解决方案”会为解决方案中的每个项目生成一个MSBuild.exe进程。 我认为,在开始构建项目之前,一劳永逸地生成foo/bar.cs尝试将foo/bar.cs无效。

也许我忽略了什么? 有没有一种方法可以在全部foo/bar.cs之前实现“生成foo/bar.cs

这是修复它的笨拙方法。

msbuild myproject.proj /maxcpucount:1

正如@MadScienceDreams所建议的那样,我创建了一个其他项目依赖的单独项目。

然后我编辑了.csproj文件,以导入$(MSBuildBinPath)\\Microsoft.Common.targets而不是$(MSBuildBinPath)\\Microsoft.CSharp.targets

然后,我根据Exec任务重写了Build目标。

before.<SolutionName>.sln.targets 

放在sln文件旁边的文件,将在所有csproj之前执行,这在msbuild中有效,但在Visual Studio中不起作用。

暂无
暂无

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

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