2013-01-18 4 views
6

Sto utilizzando XDT-Transform in Visual Studio 2010 per generare più file di configurazione.Aggiunta di commenti utilizzando XDT-Transform

La trasformazione Xml funziona correttamente. Ma non riesco a trovare il modo di trasportare commenti da un file di trasformazione xml al file finale.

Proprio come c'è la trasformazione Insert per aggiungere le impostazioni di configurazione, è comunque necessario aggiungere commenti? Senza commenti potrei dover rinunciare all'intero approccio alla trasformazione.

+0

[Vota] (https://visualstudio.uservoice.com/forums/121579-visual-studio-2015/suggestions/2578637-allow-inserting-comments-with-web-config-transform) per includere questa funzionalità in Visual Studio –

risposta

0

Per quanto ne so, l'aggiunta di commenti utilizzando XDT-Transform non è possibile, ho paura.

Almeno non sembra essere menzionato all'interno del XDT-Transform documentation

2

Questo non è esattamente quello che vuoi, ma ritengo utile una volta ogni tanto. XmlTransform aggiungerà commenti se sono contenuti in un elemento aggiunto.

ad es.

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

Ho trovato una soluzione possibile per voi.

È sufficiente indicare qualcosa come Inserimento al livello più alto che si sta aggiungendo. Dopodiché puoi semplicemente aggiungere elementi come faresti normalmente.

Significato questo non funziona per portare oltre il tuo commento

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

Ma questo sarebbe

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

Nient'altro richiede una trasformazione alla copiatura sopra l'elemento del tutto.

Upside: ottieni i tuoi commenti e non devi inserire xdt:Transform="Insert" in ogni elemento chiave.

Lato negativo: si finisce per distruggere completamente la sezione e di aggiungerla, che finisce per aggiungerla alla fine di Web.config. Se il cambiamento nella formattazione totale è ok, allora fantastico. Inoltre richiede di ricreare l'intera sezione che potrebbe aumentare la dimensione delle tue trasformazioni.

+0

buono a conoscere il lato negativo –

+3

lol il lato negativo è una specie di grande svantaggio ... –

+1

Puoi usare InsertAfter e insertBefore per specificare le posizioni delle sezioni aggiunte se sei preoccupato di dove appaiono nel file, ad es. xdt: Transform = "InsertAfter (/ configurazione/appSettings)" – Rob

0

Non possibile senza codice di scrittura.

Tuttavia, la mia soluzione attuale è quella di misura il XDT Transform biblioteca, dal fondo seguendo il link: Extending XML (web.config) Config transformation

Ed ecco il mio esempio di CommentAppend, CommentPrepend che prendono commento testo come parametro di input, come credo altrimenti Insert non può funzionare come il commento che avresti messo il tuo xdt:Transform="Insert" verrà ignorato da XDT Transform in quanto è un commento.

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); 
     } 
    } 
} 

e l'ingresso web.Release.config:

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

E l'output:

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

Attualmente sto usando riflettore a guardare Microsoft.Web.XmTransform viene fornito con Visual Studio V12.0 per capire come funziona, ma probabilmente è meglio guardare il source code itself