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

时间:2013-11-15 20:22:56

标签: c# visual-studio-2012 msbuild

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

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

我尝试了各种方法:

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

单独构建每个项目都可以正常工作。但是一旦我使用“构建解决方案”,我就会遇到一个竞争条件:目标中的目标会在另一个目标重新创建时尝试编译foo/bar.cs

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

也许我忽略了什么?是否有一种方法可以在构建所有内容之前实现“生成foo/bar.cs

3 个答案:

答案 0 :(得分:1)

这是修复它的方法。

msbuild myproject.proj /maxcpucount:1

答案 1 :(得分:0)

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

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

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

答案 2 :(得分:0)

before.<SolutionName>.sln.targets 

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