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