Построение конфигурации решения VS 2010 для контекста проекта - PullRequest
3 голосов
/ 01 декабря 2011

У меня есть решение Visual Studio, содержащее более 30 проектов. Существует две конфигурации сборки: Debug и Release. Десять файлов проекта ( .csproj ) генерируются достаточно часто с использованием внешнего инструмента, и шаблоны для этого поколения включают в себя конфигурации Debug и Release. Изменение шаблонов для включения дополнительных конфигураций на самом деле не вариант.

Итак, у меня проблема в том, что у меня есть новый проект, размещенный в AppFabric / IIS. Я использую преобразования Web.Config, чтобы обновить Web.Config для развертывания в 4 различных средах: Разработка, Тестирование, Подготовка, Производство. Я добавил эти контексты в конкретный проект с помощью Configuration Manager. Это работает, поэтому я могу обновить Configuration Manager, например, для Выпуск сборки для использования производственного контекста для проекта. Щелчок правой кнопкой мыши и создание пакета развертывания для проекта приводит к соответствующему преобразованию, применяемому к Web.Config.

Теперь я хочу автоматизировать процесс, поэтому у меня есть скрипт MSBuild:

<ItemGroup>
    <BuildMode Include="Dev"/>
    <BuildMode Include="Test"/>
    <BuildMode Include="Staging"/>
    <BuildMode Include="Prod"/>
</ItemGroup>

<Target Name="Build" DependsOnTargets="Package"></Target>

<!--
  Build deployment package for each target environment
-->
<Target Name="Package" Outputs="%(BuildMode.Identity)">
    <Message Text="Building %(BuildMode.Identity)"/>
    <MSBuild Projects="..\SynchWorkflow\SynchWorkflow.csproj"
        Targets="Package"
        Properties="Platform=AnyCPU;Configuration=%(BuildMode.Identity);"/>
</Target>

К сожалению, это ошибка, потому что он пытается построить, например. Prod конфигурация, когда она не существует - Prod является только контекстом для проекта SynchWorkflow. Я хочу создать контекстный пакет Prod , используя конфигурацию Release . Возможно ли это с помощью задачи MSBuild ? Есть ли дополнительный параметр, который я могу предоставить для задачи MSBuild в атрибуте Properties , который позволил бы это?

1 Ответ

3 голосов
/ 01 декабря 2011

Я добавил новые конфигурации решений для каждой среды (без добавления новых конфигураций проектов), а затем использовал Configuration Manager для установки контекстов на Release для зависимых проектов. К сожалению, это не сработало, потому что задача MSBuild строилась на основе файла проекта, а не решения. Решено с помощью SO ответа Жюльена Хорау . Добавление новых конфигураций решения было правильным подходом, но связанный ответ закрыл для меня цикл. Сценарий сборки был обновлен до следующего:

  <ItemGroup>
    <BuildMode Include="Development"/>
    <BuildMode Include="Test"/>
    <BuildMode Include="Staging"/>
    <BuildMode Include="Production"/>
  </ItemGroup>
  <PropertyGroup>
    <PackageLocation>$(MSBuildProjectDirectory)</PackageLocation>
  </PropertyGroup>

  <Target Name="Build" DependsOnTargets="Package"></Target>

  <!--
    Build deployment package for each target environment
  -->
  <Target Name="Package" Outputs="%(BuildMode.Identity)">
    <Message Text="Building %(BuildMode.Identity)"/>

    <MSBuild Projects="..\SynchWorkflow.sln"
       Properties="Platform=Any CPU;
                   Configuration=%(BuildMode.Identity);
                   DeployOnBuild=true;
                   DeployTarget=Package;
                   PackageLocation=$(PackageLocation)\SynchWorkflow.%(BuildMode.Identity)Package.zip;"/>
  </Target>

Скрипт строится на основе файла решения и генерирует правильный пакет для каждой целевой среды. Для целей примера сценария я создаю пакеты в MSBuildProjectDirectory , что немного неоптимально.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...