TFS MSBuild: объединение параллельных и последовательных сборок в одном файле TFS .proj

#c# #tfs #msbuild

#c# #tfs #msbuild

Вопрос:

Я изложу сценарий:

  1. У нас есть TFS build .proj, который последовательно создает 3 решения для зависимостей.
  2. Затем параллельно создается около 100 несвязанных решений.

Казалось, что это нормально работало в .net 3.5, однако, поскольку мы перешли на 4.0, похоже, что решения для зависимостей создаются параллельно, что вызывает проблемы.

Я всегда мог просто сделать

<Exec Command="C:PATHTOMSBUILD SOLUTION1">
<Exec Command="C:PATHTOMSBUILD SOLUTION2">
<Exec Command="C:PATHTOMSBUILD SOLUTION3">

и т.д. Но это кажется немного запутанным.

Итак, мой вопрос: как мне указать MSBUILD создавать некоторые решения последовательно, а затем параллельно создавать множество других?

(Наш текущий шаблон сборки приведен ниже)

 <ItemGroup>
  <SolutionToBuild0 Include="$(SolutionRoot)SolutionsMSBuildTasksMSbuildTasks.sln"/>

  <SolutionToBuild1 Include="$(SolutionRoot)SolutionsLevel1Level1.sln" />

  <SolutionToBuild2 Include="$(SolutionRoot)SolutionsLevel2Level2.sln" />

  <SolutionToBuild3 Include="$(SolutionRoot)Solutionsxxx.Reportingxxx.Reporting.sln />
</ItemGroup>

<MSBuild Projects="@(SolutionToBuild0)" Targets="Build" Properties="TeamBuildConstants=$(TeamBuildConstants)" BuildInParallel="false" />

<MSBuild Projects="@(SolutionToBuild1)" Targets="Build" Properties="TeamBuildConstants=$(TeamBuildConstants)" BuildInParallel="false" />
<MSBuild Projects="@(SolutionToBuild2)" Targets="Build" Properties="TeamBuildConstants=$(TeamBuildConstants)" BuildInParallel="false" />
<MSBuild Projects="@(SolutionToBuild3)" Targets="Build" Properties="TeamBuildConstants=$(TeamBuildConstants)" BuildInParallel="false" />
  

 <SolutionToBuild Include="$(SolutionRoot)Solutionsxxx.LocationImporterxxx.LocationImporter.sln" />
<SolutionToBuild Include="$(SolutionRoot)xxxDevSourceserver_and_common2008.sln" />
  

`

Ответ №1:

Вы упомянули зависимость от решения, мне интересно, можете ли вы использовать project reference для решения вашей проблемы? Если вы можете указать зависимость ваших проектов, используя ссылки на проекты, тогда MSBuild определит, что ему нужно строить параллельно, а что нет.

Посмотрите, можно ли решить вашу проблему с помощью ответов на форуме Team Build:

http://social.msdn.microsoft.com/Forums/en/tfsbuild/thread/80b15488-771e-4b0f-92a3-0175a639286e