2016-12-28 3 views
0

Ich habe eine Lösungsdatei, die ein Website-Projekt (neben anderen Projekttypen) enthält. Es verwendet ein Veröffentlichungsprofil für die Bereitstellung und ich versuche, die gesamte Sache nach TFS (2015) zu verschieben, um den Build- und Bereitstellungsprozess zu automatisieren. Wie gesagt, here kann ich die Build-Konfiguration nicht verwalten, da es ein Website-Projekt ist und folglich die Web.config Transformation feature nicht verwenden kann.Manuelle Config-Transformation als TFS Build-Schritt

Ich möchte eine Art Transformation durchführen, vielleicht als Build-Schritt. Ich kann die Datei web.release.config manuell erstellen und verwalten, weiß aber nicht, wie ich sie manuell umwandeln kann. Existiert eine XLST-Datei, um sie außerhalb von Visual Studio zu transformieren (z. B. ein Cmd-Build-Schritt, um einen XSLT-Prozessor aufzurufen)?

Nachtrag: zu einem Web-Projekt konvertieren würde auf jeden Fall das Problem zu beheben, aber keine Lösung, wie es für mich wäre Beteiligung von den entfernten Vertragspartner benötigen, um unsere Codebasis beitragen - eine Lösung TFS Build-Ebene ist die einzige Sache, Ich suche.

+0

Sie sollten Ihr Projekt in eine Webanwendung ändern, um zusätzliche Funktionen sowie Stabilität und Konsistenz in Ihrer Anwendung zu erhalten. –

+0

Löst CeCes Lösung Ihr Problem? –

+0

Ich denke nicht, dass es, da es eine zusätzliche Basisdatei erfordern würde (wodurch die während der Entwicklung verwendete web.config nicht während des Build-Prozesses verwiesen wird) oder die Token in der web.config gespeichert werden müssten Datei selbst, wodurch die Datei web.config während der Entwicklung nutzlos gemacht wird, es sei denn, es wurde ein lokaler Post-Build-Schritt hinzugefügt, um Token auch lokal zu ersetzen (wenn ich das Plugin richtig verstehe). – mlhDev

Antwort

0

Da meine eigentliche Transformationen relativ einfach wäre ich diese XSL-Transformation entwickelt:

<?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> 

, dass einige offensichtliche Mängel hat,

  • Gegenstände ersetzt werden müssen manuell definiert
  • Ersetzt mit dem gesamten Element, nicht nur die angegebenen Attribute
  • Speichert keine untergeordneten Elemente (z. Ich habe versucht, system.web/[email protected]-false zu ändern, aber ich verlor alle meine system.web/compilation/assemblies Einträge)

Ich plane dies in einer Command Line Schritt hinzuzufügen, zwischen meinem Visual Studio Build-Schritt und Kopieren von Dateien Schritt und rief entweder msxsl.exe oder Saxon's HE transformieren Motor.

0

Wie @MrHinsh im Kommentar erwähnt, wird vorgeschlagen, ein Webanwendungsprojekt anstelle eines Websiteprojekts zu erstellen, da das Webprojektprojekt standardmäßig keine Datei web.release.config hat, während ein Webanwendungsprojekt vorhanden ist.

Um Token in Dateien mit Variablenwerten zu ersetzen, können Sie in Ihrer Builddefinition eine Replace Tokens Aufgabe hinzufügen.

enter image description here