2013-11-15 4 views
1

У меня есть решение Visual Studio 2012 C#, которое содержит около 15 .csproj проектов.Visual Studio 2012 C# решение, состояние параллельной сборки гонки

В каждом проекте используется общий файл foo/bar.cs, который создается до запуска сборки.

Я пробовал различные подходы:

  • предварительно построить события
  • настройки MSBuild в BeforeBuild цели

Построение каждого проекта индивидуально работает отлично. Но как только я использую «Build Solution», я сталкиваюсь с состоянием гонки: из целей пытается скомпилировать foo/bar.cs, пока он воссоздается другой целью.

В этот момент я понял, что использование «Build Solution» порождает один процесс MSBuild.exe для каждого проекта в решении. Я думаю, что это делает void мои попытки генерировать foo/bar.cs раз и навсегда, прежде чем начинать строить проекты.

Возможно, я что-то упустил? Есть ли такой подход, который позволит достичь «генерировать foo/bar.cs, прежде чем строить все?

+0

Возможно, файл можно разместить в одном общем проекте библиотеки и иметь ссылку на 15 проектов в этой библиотеке? Таким образом вам нужно включить эту команду генерировать в свой проект библиотеки. –

+1

Я бы сделал проект с выходом foo/bar.cs, а затем другие проекты зависели от этого проекта ... или превратили его в библиотеку (так как это выглядит семантически, что вы пытаетесь сделать в любом случае). – IdeaHat

+0

Это немного сложнее, чем «положить это в библиотеку», к сожалению. Наличие другого проекта, который ничего не делает, кроме настраиваемой цели «Build», заманчиво. Я буду следить за этим –

ответ

0

Как @MadScienceDreams предложил, я создал отдельный проект, который другие проекты зависят от.

И я редактировал файл .csproj импортировать $(MSBuildBinPath)\Microsoft.Common.targets вместо $(MSBuildBinPath)\Microsoft.CSharp.targets.

Тогда я переписал Build цель с точки зрения Exec задача.

1

Это Sucky способ это исправить.

msbuild myproject.proj /maxcpucount:1 
+0

, которого вы не можете сделать из среды IDE без изменения глобальных настроек каждый раз, когда вы хотите использовать этот конкретный 'sln' –

+2

Я сказал:« sucky ».......... – granadaCoder

0
before.<SolutionName>.sln.targets 

, расположенный рядом с sln-файлом, будет выполнен до всех csproj, это работает в msbuild, но не в Visual Studio.

Смежные вопросы