Я использую заменяющую функцию файла конфигурации 2010-х Visual Studio, "Публикуют" функциональность, как описано в этой статье. Я хочу автоматизировать это использование MSBuild/Гудзон. Кто-либо знает, как сделать это?
Мне нравится, как это работает, но если я не могу автоматизировать его, я должен буду переключиться на XmlMassUpdate или подобный.
Чтобы преобразовать файл конфигурации, вам необходимо выполнить цель 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 вы можете добавить Шаг сборки в вашей сборке или создайте специальное задание, настроенное следующим образом:
Ваш файл csproj.
/ t: ConfigSubstitution / p: Platform = AnyCpu; Configuration = Test; TransformedWebConfigDestination = DestinationFolder
Отредактируйте ваш web project.csproj
под
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
Add -
Посмотрите на вывод Build (убедитесь, что VS Tools - Options - Project & Solutions -Build & Run - MSBuild Output Verbosity - Detailed)
Вы должны увидеть команды msdeploy, которые VS использует для создания пакета. Насколько я понимаю, VS использует Web Platform Pipeline API и .target файлы для создания пакетов развертывания при сборке с помощью MSBuild, а эта команда изменяет использование MsDeploy.
Этот материал так нуждается в документации, что это очень расстраивает.
Я использую это в Hudson, чтобы нацелиться на Release:
/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