2013-01-18 10 views
6

Ich verwende XDT-Transformation in Visual Studio 2010, um mehrere Konfigurationsdateien zu generieren.Kommentare mithilfe von XDT-Transformation hinzufügen

Xml-Transformation funktioniert gut. Aber ich kann anscheinend keine Möglichkeit finden, Kommentare von einer XML-Transformationsdatei in die endgültige Datei zu übertragen.

So wie es Insert Transformation Konfigurationseinstellungen für das Hinzufügen, gibt es ohnehin Kommentare hinzufügen? Ohne Kommentare muss ich vielleicht den gesamten Transformationsansatz aufgeben.

+0

zu betrachten [Vote] (https://visualstudio.uservoice.com/forums/121579-visual-studio-2015/suggestions/2578637-allow-inserting-comments-with-web-config-transform), damit diese Funktion in Visual eingebunden werden kann Studio –

Antwort

0

Soweit ich bin mir bewusst, das Hinzufügen von Kommentaren verwenden ist XDT-Transformation nicht möglich Ich habe Angst.

Wenigstens scheint es nicht innerhalb der XDT-Transform documentation

2

erwähnt zu werden Dies ist nicht genau das, was Sie wollen, aber ich finde es einmal in eine Weile nützlich. XmlTransform fügt Kommentare hinzu, wenn sie in einem hinzugefügten Element enthalten sind.

z.B.

<appSettings> 
<remove key="comment" value="" xdt:Transform="Insert"><!-- this comment will appear in the transformed config file! --></remove> 
</appSettings> 
5

Ich habe eine mögliche Lösung für Sie gefunden.

Es ist nur notwendig, etwas als ein Insert auf höchstem Niveau bezeichnen Sie es hinzufügen. Danach können Sie einfach Elemente hinzufügen, wie Sie es normalerweise tun würden.

Bedeutung nicht

<appSettings> 
    <!--My Secret Encryption Key--> 
    <add key="ENCRYPT_KEY" value="hunter2" xdt:Transform="Insert" /> 
</appSettings> 

über Ihren Kommentar zu bringen funktioniert aber dies würde

<appSettings xdt:Transform="Remove" /> 
<appSettings xdt:Transform="Insert" > 
    <!--My Secret Encryption Key--> 
    <add key="ENCRYPT_KEY" value="hunter2"/> 
</appSettings> 

Nichts erfordert auch ein ganz, wie es Kopien über das Element zu verwandeln.

Upside: Sie erhalten Ihre Kommentare und müssen nicht xdt:Transform="Insert" in jedes Schlüsselelement einfügen.

Downside: Sie zerstören schließlich den Abschnitt vollständig und fügen es neu hinzu, was es am Ende Ihrer Web.config anhängt. Wenn die Änderung der Gesamtformatierung okay ist, dann ist das großartig. Außerdem müssen Sie den gesamten Abschnitt neu erstellen, um die Größe Ihrer Transformationen zu erhöhen.

+0

gut zu wissen, die Unterseite –

+3

Lol der Nachteil ist eine Art großer Nachteil ... –

+1

Sie können InsertAfter und InsertBefore verwenden, um die Standorte Ihrer hinzugefügten Abschnitte anzugeben, wenn Sie sich Sorgen machen, wo sie in der Datei angezeigt werden xdt: Transform = "EinfügenAfter (/ configuration/appSettings)" – Rob

0

Nicht möglich ohne Code zu schreiben.

jedoch meine derzeitige Lösung Ausmaß ist die XDT Bibliothek Transformation, durch grundsätzlich über den Link: Extending XML (web.config) Config transformation

Und hier ist mein Beispiel von CommentAppend, CommentPrepend den Kommentartext als Eingabeparameter verwenden, da ich sonst Insert glaube selbst kann nicht funktionieren als der Kommentar, den Sie setzen würde Ihre xdt:Transform="Insert" wird von XDT Transformation ignoriert, wie es Kommentar ist.

internal class CommentInsert: Transform 
{ 
    protected override void Apply() 
    { 
     if (this.TargetNode != null && this.TargetNode.OwnerDocument != null) 
     { 
      var commentNode = this.TargetNode.OwnerDocument.CreateComment(this.ArgumentString); 
      this.TargetNode.AppendChild(commentNode); 
     } 
    } 
} 

internal class CommentAppend: Transform 
{ 
    protected override void Apply() 
    { 
     if (this.TargetNode != null && this.TargetNode.OwnerDocument != null) 
     { 
      var commentNode = this.TargetNode.OwnerDocument.CreateComment(this.ArgumentString); 
      this.TargetNode.ParentNode.InsertAfter(commentNode, this.TargetNode); 
     } 
    } 
} 

Und die Eingabe web.Release.config:

<security xdt:Transform="CommentPrepend(comment line 123)" > 
</security> 
<security xdt:Transform="CommentAppend(comment line 123)" > 
</security> 

Und die Ausgabe:

<!--comment line 123--><security> 
    <requestFiltering> 
    <hiddenSegments> 
     <add segment="NWebsecConfig" /> 
     <add segment="Logs" /> 
    </hiddenSegments> 
    </requestFiltering> 
</security><!--comment line 123--> 

ich derzeit Reflector bin mit bei Microsoft.Web.XmTransform aussehen kommt mit Visual Studio V12.0 um herauszufinden, wie es funktioniert, aber wahrscheinlich ist es besser, die source code itself

Verwandte Themen