Сбой задачи MSbuild, потому что решение «Любой процессор» построено не по порядку - PullRequest
3 голосов
/ 27 марта 2009

У меня есть два решения для сборки в Teambuild: одно - само приложение, другое - установщик WiX. Я хочу собрать приложение, используя конфигурацию сборки «Any CPU», а установщик - «x86». Я сначала перечислил решение «Any CPU» в файле моего проекта, но Teambuild всегда сначала строит решение «x86».

Я устанавливаю BuildSolutionsInParallel = false, но он по-прежнему строит решения в обратном порядке. Если я изменю первое решение на «Смешанную платформу», оно будет работать нормально. Как получить решения для сборки в порядке, указанном в файле проекта?

<Project ...>
<PropertyGroup>
  <!-- We want to build the install solution after the build solution -->
  <BuildSolutionsInParallel>false</BuildSolutionsInParallel>
</PropertyGroup>

<ItemGroup>
  <SolutionToBuild Include="$(BuildProjectFolderPath)/Pricer/Pricer.sln">
    <Targets></Targets>
    <Properties></Properties>
  </SolutionToBuild>
  <SolutionToBuild Include="$(BuildProjectFolderPath)/Pricer/Pricer.Install/Pricer.Install.sln">
    <Targets></Targets>
    <Properties></Properties>
  </SolutionToBuild>
</ItemGroup>

  <ItemGroup>
    <ConfigurationToBuild Include="Release|Any CPU">
      <FlavorToBuild>Release</FlavorToBuild>
      <PlatformToBuild>Any CPU</PlatformToBuild>
    </ConfigurationToBuild>
    <ConfigurationToBuild Include="Release|x86">
      <FlavorToBuild>Release</FlavorToBuild>
      <PlatformToBuild>x86</PlatformToBuild>
    </ConfigurationToBuild>
  </ItemGroup>
</Project>

Ответы [ 4 ]

2 голосов
/ 11 мая 2009

Порядок сборки проекта может быть установлен для проектов, принадлежащих к одному решению. В этом случае по несвязанным причинам проекты должны принадлежать 2 различным решениям.

Я обнаружил здесь , что проект C # в решении «Смешанные платформы» будет создаваться как «Любой процессор», поэтому решение всегда заключается в использовании «Смешанных платформ» в файле проекта Teambuild.

2 голосов
/ 23 июля 2009

Проблема здесь в том, что любой ЦП обрабатывается немного иначе, по соглашению, чем другие конфигурации - например, он не входит в иерархию выходных каталогов. В файле целей Team Build есть цель с именем ComputeConfigurationList:

<ItemGroup>
  <!-- ConfigurationList for any Platform but Any CPU -->
  <ConfigurationList Condition=" '%(ConfigurationToBuild.PlatformToBuild)' != 'Any CPU' " Include="$(MSBuildProjectFile)">
    <Properties>Configuration=%(ConfigurationToBuild.FlavorToBuild);Platform=%(ConfigurationToBuild.PlatformToBuild);TeamBuildOutDir=$(BinariesRoot)\%(ConfigurationToBuild.PlatformToBuild)\%(ConfigurationToBuild.FlavorToBuild)\;TeamBuildPublishDir=$(BinariesRoot)\%(ConfigurationToBuild.PlatformToBuild)\%(ConfigurationToBuild.FlavorToBuild)\</Properties>
  </ConfigurationList>
  <!-- ConfigurationList for Any CPU Platform -->
  <ConfigurationList Condition=" '%(ConfigurationToBuild.PlatformToBuild)' == 'Any CPU' " Include="$(MSBuildProjectFile)">
    <Properties>Configuration=%(ConfigurationToBuild.FlavorToBuild);Platform=%(ConfigurationToBuild.PlatformToBuild);TeamBuildOutDir=$(BinariesRoot)\%(ConfigurationToBuild.FlavorToBuild)\;TeamBuildPublishDir=$(BinariesRoot)\%(ConfigurationToBuild.FlavorToBuild)\</Properties>
  </ConfigurationList>
</ItemGroup>

Эта цель обрабатывает входящую группу элементов ConfigurationToBuild в двух пакетах - Любой ЦП и все остальное. Таким образом, результирующая группа элементов ConfigurationList сортируется иначе, чем исходная группа элементов ConfigurationToBuild, причем все конфигурации Any CPU идут после всех non Any конфигураций CPU.

Обходной путь, если важен порядок ваших конфигураций, заключается в определении новой конфигурации решения для всех ваших решений - см. Инструкции в блоге, на которые есть ссылки выше. Например, вы можете определить конфигурацию под названием TFS, основанную на Any CPU для ваших решений Any CPU, на Win32 для этих решений и т. Д. Затем в вашем файле TfsBuild.proj вы бы включили эту единственную конфигурацию в группу элементов ConfigurationToBuild. Это будет иметь приятный побочный эффект - избавиться от различных предупреждений о «недопустимой конфигурации», которые вы, вероятно, получаете прямо сейчас, когда TFS Build пытается построить ваши конфигурации Win32 для любого процессора и наоборот.

0 голосов
/ 17 апреля 2010

Я только что опубликовал похожий вопрос, потому что это похоже на ту же проблему, но не имеет никакого отношения к AnyCPU. Было ли это когда-либо решено?

Почему Tfs2010 создает мой проект Wix раньше всего?

0 голосов
/ 07 мая 2009

Хорошо, я не уверен, что то же самое с Teambuild, но как насчет установки порядка сборки проектов через "Project -> Project Build Order"?

...