我在尝试使用 MSBuild 构建时遇到了一个奇怪的问题。
我正在使用 MSBuild 构建解决方案文件,其中 /m(并行构建)和 BuildProjectReferences 设置为 true。假设我在 sln 文件中有 A.vcxproj 和 B.vcxproj,B 有一个对 A 的项目引用。发生的情况是 A 项目首先开始构建,而在编译过程中,B 项目开始在另一个进程中构建(因为并行构建),它会调用构建 A。现在这会导致竞争条件,因为我们有两个进程试图构建同一个项目 A,我会看到访问问题。
理想情况下,如果 A 尚未完成构建,或者如果它确实调用 B 然后检测到 A 仍在构建并等待它完成,则 MSBuild 不应调用构建 B。这一切都不会发生。此外,这仅在 MSBuild 中发生 - 如果我尝试从 VS2015 IDE 构建解决方案文件,则不会发生。
知道为什么 MSBuild 会这样吗?