我在尝试使用MSBuild进行构建时遇到了一个奇怪的问题。
我使用MSBuild构建一个/ m(并行构建)和BuildProjectReferences设置为true的解决方案文件。 假设我在sl文件中有A.vcxproj和B.vcxproj,其中B有一个项目引用A. 会发生什么是一个项目首先开始构建,而在编译过程中,B项目开始在另一个进程中构建(自并行构建)并且它将调用构建A。 现在这会导致竞争条件,因为我们有两个进程试图构建相同的项目A,我会看到访问问题。
理想情况下,如果A没有完成构建,或者如果它确实调用B然后检测到A仍在构建并等待它完成,则MSBuild不应该调用构建B. 这些都不会发生。此外,这只发生在MSBuild上 - 如果我尝试从VS2015 IDE构建解决方案文件,则不会发生这种情况。
知道为什么MSBuild会这样做吗?
答案 0 :(得分:1)
终于找到了我的问题的解决方案
MSBuild期望以两种方式添加项目依赖性
1.在vcxproj本身中,添加所有依赖项目引用
2.在sln文件中,定义项目依赖项。
以下VS博客实际上反过来说 - 例如 - https://blogs.msdn.microsoft.com/vcblog/2010/02/16/project-settings-changes-with-vs2010/表示项目依赖项和项目引用是类似的,只使用一个特定的项目引用。
使用VS IDE构建时可能会出现这种情况,但对于MSBuild则不行。它需要在 ProjectReference 和 ProjectDependencies 上定义项目依赖项。
希望这可以帮助任何遇到与我相同问题的人。