MSBuild - состояние гонки при попытке создания ссылок на проекты
Я столкнулся со странной проблемой, пытаясь построить с использованием MSBuild.
Я использую MSBuild для создания файла решения с /m (параллельная сборка) и BuildProjectReferences, установленным в true. Предположим, у меня есть A.vcxproj и B.vcxproj в файле sln, где B имеет ссылку на проект A. В этом случае сначала начинается сборка проекта, а во время компиляции проект B начинает сборку в другом процессе (с параллельных сборок) и вызовет сборку A. Теперь это вызывает состояние гонки, потому что у нас есть два процесса, пытающихся построить один и тот же проект A, и я вижу проблемы с доступом.
В идеале MSBuild не должен вызывать сборку B, если A еще не завершил сборку или если он действительно вызывает B, то обнаруживает, что A все еще строит, и ожидает его завершения. Ничего из этого не происходит. Кроме того, это происходит только с MSBuild - не происходит, если я пытаюсь построить файл решения из IDE VS2015.
Есть идеи, почему MSBuild ведет себя так?
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.
Надеюсь, это поможет всем, кто столкнулся с той же проблемой, что и я.