Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MSBuild-尝试生成项目引用时的竞争条件_Msbuild_Race Condition_Project Reference_Parallel Builds_Msbuild Projectreference - Fatal编程技术网

MSBuild-尝试生成项目引用时的竞争条件

MSBuild-尝试生成项目引用时的竞争条件,msbuild,race-condition,project-reference,parallel-builds,msbuild-projectreference,Msbuild,Race Condition,Project Reference,Parallel Builds,Msbuild Projectreference,在尝试使用MSBuild进行构建时,我遇到了一个奇怪的问题 我正在使用MSBuild生成一个解决方案文件,其中/m(并行构建)和BuildProjectReferences设置为true。 假设我在sln文件中有A.vcxproj和B.vcxproj,其中B具有对A的项目引用。 发生的是一个项目首先建立,而在编译过程中,B项目开始在另一个过程中构建(因为并行构建),它将调用构建A。 现在这导致了竞争条件,因为我们有两个进程试图构建同一个项目,我会看到访问问题 理想情况下,如果A尚未完成构建,则M

在尝试使用MSBuild进行构建时,我遇到了一个奇怪的问题

我正在使用MSBuild生成一个解决方案文件,其中/m(并行构建)和BuildProjectReferences设置为true。 假设我在sln文件中有A.vcxproj和B.vcxproj,其中B具有对A的项目引用。 发生的是一个项目首先建立,而在编译过程中,B项目开始在另一个过程中构建(因为并行构建),它将调用构建A。 现在这导致了竞争条件,因为我们有两个进程试图构建同一个项目,我会看到访问问题

理想情况下,如果A尚未完成构建,则MSBuild不应调用构建B,或者如果它确实调用了B,则检测A仍在构建,并等待它完成。 所有这些都不会发生。此外,只有在使用MSBuild时才会发生这种情况-如果我尝试从VS2015 IDE生成解决方案文件,则不会发生这种情况


知道MSBuild为什么会这样吗

终于找到了解决我问题的办法

MSBuild要求以两种方式添加项目依赖项
1.在vcxproj本身中,添加所有依赖的projectreference
2.在sln文件中,也定义projectdependencies

下面的VS博客实际上声明了相反的情况——例如——声明projectdependencies和projectreference是类似的,并且只使用一个特定的projectreferences

当使用VS IDE而不是MSBuild生成时,可能会出现这种情况。它需要在项目参考项目依赖项上定义项目依赖项


希望这能帮助任何人碰到与我相同的问题。

哪一个MSBug版本,哪个VisualC++版本?这可能会对VS 2015和MSBuild 14.0产生影响