MSBuild — состояние гонки при попытке построить ссылки на проект

Я столкнулся со странной проблемой при попытке сборки с помощью MSBuild.

Я использую MSBuild для создания файла решения с параметром /m (параллельная сборка) и параметром BuildProjectReferences, для которого задано значение true. Предположим, у меня есть A.vcxproj и B.vcxproj в файле sln, где B имеет ссылку проекта на A. Что происходит, так это то, что проект A начинает сборку первым, и пока он находится в середине компиляции, проект B начинает сборку в другом процессе ( с параллельных сборок), и он вызовет сборку A. Теперь это вызывает состояние гонки, потому что у нас есть два процесса, пытающихся построить один и тот же проект A, и я увижу проблемы с доступом.

В идеале MSBuild не должен вызывать сборку B, если сборка A еще не завершена или если она вызывает B, а затем обнаруживает, что сборка A все еще выполняется, и ждет ее завершения. Ничего этого не происходит. Кроме того, это происходит только с MSBuild — этого не происходит, если я пытаюсь собрать файл решения из IDE VS2015.

Любая идея, почему MSBuild ведет себя таким образом?


person comingbacktolife    schedule 05.05.2017    source источник
comment
Какая версия MsBuild, какая версия Visual C++? Это может иметь влияние.   -  person jessehouwing    schedule 05.05.2017
comment
VS 2015 и MSBuild 14.0   -  person comingbacktolife    schedule 05.05.2017


Ответы (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.

Надеюсь, это поможет любому, кто столкнулся с той же проблемой, что и моя.

person comingbacktolife    schedule 26.06.2017