2016-12-28 5 views
0

У меня есть файл решения, содержащий проект веб-сайта (среди других типов проектов). Он использует профиль публикации для развертывания, и я пытаюсь переместить все это в TFS (2015), чтобы автоматизировать процесс сборки и развертывания. Как указано here Я не могу управлять конфигурацией сборки, так как это проект веб-сайта и, следовательно, не может использовать Web.config Transformation feature.Ручное преобразование конфигурации как шаг построения TFS

Я хотел бы выполнить какое-то преобразование, возможно, как шаг сборки. Я могу вручную создать и поддерживать файл web.release.config, но не знаю, как его вручную преобразовать. Существует ли файл XLST для преобразования его за пределы Visual Studio (например, шаг построения cmd для вызова XSLT-процессора)?

Добавление: преобразование в веб-проект будет наиболее определенно решить проблему, но не решение для меня, поскольку это потребовало бы участия от удаленных подрядчиков, способствующих нашей базе кода - решение TFS построения уровня является единственным Я ищу.

+0

Вы должны изменить свой проект на веб-приложение, чтобы получить дополнительные функции, а также стабильность и последовательность в своем приложении. –

+0

Решение CeCe решит вашу проблему? –

+0

Я не думаю, что это будет, так как для этого потребуется либо дополнительный базовый файл (заставляющий web.config, используемый во время разработки, не ссылаться во время процесса сборки), либо потребовалось бы, чтобы токены сохранялись в файле web.config сам файл, при этом рендеринг web.config бесполезен во время разработки, если не был добавлен только пост-строительный шаг только для локального пользователя, а также выполнять локальные локации (если я правильно понимаю плагин). – mlhDev

ответ

0

Поскольку мои фактические преобразования были относительно просты Я разработал этот XSL преобразования:

<?xml version="1.0" encoding="utf-8"?> 
<xsl:stylesheet version="1.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:msxsl="urn:schemas-microsoft-com:xslt" 
    exclude-result-prefixes="msxsl"> 
    <xsl:output method="xml" indent="yes"/> 
    <xsl:variable name="xformPath">web.Prod.config</xsl:variable> 
    <xsl:variable name="xform" select="document($xformPath)"></xsl:variable> 

    <xsl:template match="@* | node()"> 
    <xsl:copy> 
     <xsl:apply-templates select="@* | node()"/> 
    </xsl:copy> 
    </xsl:template> 

    <xsl:template name="output-transform"> 
    <xsl:param name="xformNode" /> 
    <xsl:variable name="key" select="@key" /> 
    <xsl:choose> 
     <xsl:when test="$xformNode"> 
     <xsl:copy-of select="$xformNode" /> 
     </xsl:when> 
     <xsl:otherwise> 
     <xsl:copy> 
      <xsl:apply-templates select="@* | node()"/> 
     </xsl:copy> 
     </xsl:otherwise> 
    </xsl:choose> 
    </xsl:template> 

    <xsl:template match="/configuration/appSettings/add"> 
    <xsl:variable name="key" select="@key" /> 
    <xsl:call-template name="output-transform"> 
     <xsl:with-param name="xformNode" select="$xform/configuration/appSettings/add[@key=$key]" /> 
    </xsl:call-template> 
    </xsl:template> 

    <xsl:template match="/configuration/connectionStrings/add"> 
    <xsl:variable name="name" select="@name" /> 
    <xsl:call-template name="output-transform"> 
     <xsl:with-param name="xformNode" select="$xform/configuration/connectionStrings/add[@name=$name]" /> 
    </xsl:call-template> 
    </xsl:template> 

    <xsl:template match="/configuration/system.web/customErrors"> 
    <xsl:call-template name="output-transform"> 
     <xsl:with-param name="xformNode" select="$xform/configuration/system.web/customErrors" /> 
    </xsl:call-template> 
    </xsl:template> 
</xsl:stylesheet> 

Это имеет некоторые очевидные недостатки,

  • товары, подлежащие обязательной замене, необходимо вручную определить
  • Заменяет весь элемент, а не только указанные атрибуты
  • Не поддерживает элементы детей (например, Я пытался изменить system.web/[email protected] к false, но я потерял все мои system.web/compilation/assemblies записи)

я планирую добавить это шаг командной строки, между моим зрительным шаг Студия сборки и копирования файлов шаг и вызвать либо msxsl.exe или Двигатель трансформации Saxon's HE.

0

Как упоминалось в комментарии @MrHinsh, предлагается создать проект веб-приложения вместо проекта веб-сайта, так как проект веб-сайта по умолчанию не имеет файла web.release.config, а проект веб-приложения.

Чтобы заменить токены в файлах с переменными значениями, вы можете добавить задачу Replace Tokens в свое определение построения.

enter image description here

Смежные вопросы