2

我在嘗試使用MSBuild構建時遇到了一個奇怪的問題。MSBuild - 嘗試構建項目引用時的競爭條件

我正在使用MSBuild構建一個解決方案文件,並將/ m(並行構建)和BuildProjectReferences設置爲true。 假設在sln文件中有A.vcxproj和B.vcxproj,B的項目引用爲A. 會發生什麼事情A項目開始先構建,而在編譯過程中,B項目開始構建另一個項目進程(因爲並行構建),它會調用building A. 現在這會導致競爭條件,因爲我們有兩個進程試圖構建相同的項目A,我會看到訪問問題。

理想情況下,如果A沒有完成構建,或者如果確實調用B,那麼MSBuild不應該調用構建B,然後檢測到A仍在構建並等待它完成。 沒有發生這種情況。此外,這隻會發生在MSBuild - 如果我嘗試從VS2015 IDE構建解決方案文件,則不會發生。

任何想法爲什麼MSBuild的行爲是這樣嗎?

+0

哪個MsBuild版本,哪個Visual C++版本?這可能會有影響。 – jessehouwing

+0

VS 2015和MSBuild 14.0 – comingbacktolife

回答

1

終於找到了解決我的問題

的MSBuild預計,該項目依賴於兩個方面
1.在vcxproj本身添加,添加所有的依賴projectreference
2.在SLN文件太多,定義項目依賴關係。

以下VS博客實際上說明了相反的情況 - 例如 - https://blogs.msdn.microsoft.com/vcblog/2010/02/16/project-settings-changes-with-vs2010/指出項目依賴和項目引用是類似的,並且只使用一個特定的項目引用。

當您使用VS IDE構建而不是MSBuild時,這可能是正確的。它需要在ProjectReferenceProjectDependencies上定義項目相關性。

希望這可以幫助任何人遇到與我一樣的問題。