Автоматизировать VS 2010 "Публикация" подстановки файлов конфигурации - PullRequest
7 голосов
/ 04 июня 2010

Я использую функцию замены файла конфигурации функциональности «Публикация» в Visual Studio 2010, как описано в этой статье . Я хочу автоматизировать это с помощью MSBuild / Hudson. Кто-нибудь знает, как это сделать?

Мне нравится, как это работает, но если я не могу автоматизировать это, мне придется переключиться на XmlMassUpdate или аналогичный.

Ответы [ 3 ]

5 голосов
/ 11 июня 2010

Объяснение

Для преобразования вашего конфигурационного файла вам нужно выполнить цель TransformWebConfig.

Эта цель берет два файла Web.config и Web.$(Configuration).config и генерирует Web.config. Сгенерированный файл является преобразованной версией исходного для текущей конфигурации.

Этот файл создан в папке: obj\$(Configuration)\TransformWebConfig

Использование

Вы на самом деле не объясняете, чего хотите достичь, поэтому здесь основное использование - задание, которое генерирует преобразованный файл конфигурации в заданной папке.

Добавьте следующий фрагмент в конец файла вашего проекта *.csproj после импорта Microsoft.WebApplication.targets

<PropertyGroup>
  <!-- Directory where your web.config will be copied -->
  <TransformedWebConfigDestination>$(MSBuildProjectDirectory)</TransformedWebConfigDestination>
</PropertyGroup>

<!--
  This target transforms the web.config based on current configuration and
  put the transformed files in $(TransformedWebConfigDestination) folder
-->
<Target Name="ConfigSubstitution">
  <CallTarget Targets="TransformWebConfig"/>

  <ItemGroup>
    <TransformedWebConfig Include="obj\$(Configuration)\TransformWebConfig\Web.config"/>
  </ItemGroup>

  <!-- Copy the transformed web.config to the configured destination -->
  <Copy SourceFiles="@(TransformedWebConfig)"
        DestinationFolder="$(TransformedWebConfigDestination)"/>
</Target>

В Hudson вы можете добавить шаг сборки в свою сборку или создать выделенное задание, настроенное следующим образом:

  • Файл сборки MsBuild: Your csproj file.
  • Аргументы командной строки: /t:ConfigSubstitution /p:Platform=AnyCpu;Configuration=Test;TransformedWebConfigDestination=DestinationFolder
3 голосов
/ 09 июня 2010

Отредактируйте свой веб-проект.csproj

под

<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">

Добавить -
<UseMsDeployExe>True</UseMsDeployExe>

Посмотрите на выходные данные сборки (убедитесь, что VS Tools - Параметры - Проект и решения - Построить и запустить - Подробность вывода MSBuild - Подробно)

Вы должны увидеть команды msdeploy, которые VS использует для создания пакета. Насколько я понимаю, VS на самом деле использует API-интерфейсы Web Platform Pipeline и файлы .target для создания пакетов развертывания при сборке с использованием MSBuild, и эта команда изменяется вместо использования MsDeploy.

Этот материал так нуждается в документации, это очень расстраивает.

1 голос
/ 11 июня 2010

Я использую это в Гудзоне, чтобы нацелиться. Релиз:

/Property:Configuration=Release

Точные настройки:

Build
MSBuild Version: msbuild-4 (configured to point to v4 msbuild)
MsBuild Build File: project_name.sln
Command Line Arguments: /Property:Configuration=Release

Вы можете проверить это в каталоге вашего проекта, запустив что-то похожее (так как ваша версия .NET Framework может отличаться) от этого:

%SYSTEMROOT%\Microsoft.NET\Framework\v4.0.30319\msbuild project.sln /Property:Configuration=Release

...