Преобразования TFS 2012 и web.config

Я пытаюсь, чтобы моя сборка TFS создала преобразование web.config, связанное с конфигурацией, которую я выбрал для своей сборки. Когда я запускаю сборку, я проверяю файл web.config, чтобы не было применено никаких преобразований. Когда я публикую из VS2012, преобразование работает правильно.

Я настроил TFS 2012 (обновление 2) и имею отдельный сервер для сборок. У меня не установлен VS2012 на сервере сборки, но я скопировал папки и файлы C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v11.0\ Web и WebApplications с моей машины разработки на сервер сборки.

Я создал некоторые конфигурации в своем проекте и добавил некоторые преобразования в связанный файл web.{configname}.config.

Я создал сборку и установил Элементы для сборки - Конфигурации для сборки на одну из конфигураций в моем проекте. Я заметил, что у него есть только Debug и Release, у него не было ни одной из созданных мной конфигураций. (Дополнительный вопрос: это правильно, или он должен отображать все созданные мной конфигурации?)

Итак, я запускаю сборку и проверяю выходную папку, а web.config не применил преобразования. Есть ли что-нибудь еще, что мне нужно сделать?


person Nathan Greenway    schedule 01.05.2013    source источник


Ответы (3)


Простое добавление /p:TransformConfigFiles=true на самом деле ничего не даст.

Вам также необходимо добавить эту цель в файл проекта:

<Target Name="TransformConfigFiles" AfterTargets="AfterBuild" Condition="'$(TransformConfigFiles)'=='true'">
    <ItemGroup>
        <DeleteAfterBuild Include="$(WebProjectOutputDir)\Web.*.config" />
    </ItemGroup>
    <TransformXml Source="Web.config" Transform="$(ProjectConfigTransformFileName)" Destination="$(WebProjectOutputDir)\Web.config" />
    <Delete Files="@(DeleteAfterBuild)" />
</Target>

Это мой источник: http://blog.degree.no/2012/03/automatic-config-transformations/

person David De Sloovere    schedule 08.08.2013
comment
Работает на меня! И спасибо, ваш пример кода здесь даже исправляет опечатку из этого поста в блоге (который оставляет \ в двух местах). - person Abacus; 14.04.2015
comment
После того, как я добавил эти строки в файл csproj во время сборки, я получил сообщение об ошибке: «Задача TransformXml не найдена». Если у кого-то будет то же самое, вы можете добавить это перед этой целью ‹Import Project=$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v12.0\Web\Microsoft.Web.Publishing.targets Condition=!Exists('$(VSToolsPath)\ Web\Microsoft.Web.Publishing.targets') /› - person Vitalii; 24.09.2015
comment
отлично, это сработало для меня (VS2015, TFS2015)! Большое спасибо! Однако очень странно, что просто указать конфигурацию сборки недостаточно... MS иногда делает странные реализации... - person Vladislav; 27.02.2017
comment
Мой сервер сборки VSTS по-прежнему игнорирует конфигурацию и использует отладочный web.config по умолчанию. - person Jordan; 11.12.2019

Вы можете ввести имя конфигурации в списке «Элементы для сборки-> Конфигурации для сборки».

Если это не помогает, попробуйте добавить следующий аргумент MSBuild: /p:TransformConfigFiles=true (3. Дополнительно -> Аргументы MSBuild)

person mukala    schedule 07.06.2013

Щелкните правой кнопкой мыши файл решения, перейдите к свойствам, щелкните свойства конфигурации и щелкните диспетчер конфигурации вверху. Убедитесь, что ваша конфигурация для другой среды настроена правильно. если он не установлен правильно, установите его правильно и проверьте код. Теперь перейдите к шаблону сборки и проверьте свойство конфигурации для сборки на вкладке процесса, вы должны иметь возможность видеть свои различные конфигурации. если конфигурация уже настроена правильно, вы также можете добавить новое имя конфигурации, введя его в свойстве сборки.

Примечание. Вы также можете щелкнуть правой кнопкой мыши файл преобразования web.config и выбрать предварительное преобразование и убедиться, что конфигурация преобразования работает нормально.

вы также можете указать имя профиля публикации, если он работает правильно, в разделе аргументов msbuild

/p:DebugSymbols=false;DebugType=None;DeployOnBuild=true;PublishProfile=Stage
person suresh2    schedule 08.08.2013