2016-02-10 2 views
0

Pour notre application, nous utilisons un fichier XML qui est généré au cours du processus de construction (pour le moment avec NAnt). Dans le fichier XML est pour chaque application Module une section. Maintenant, je veux passer de NAnt à MSBuild.MSBUILD: Comment ajouter au fichier XML

Je veux ajouter pour chaque module les descriptions du module à notre fichier XML. Le fichier XML doit avoir la structure suivante

<?xml version="1.0" encoding="utf-8"?> 
<FactoryConfig xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <Modules> 
    <ModuleConfig> 
     <ModuleName>Module1</ModuleName> 
     <Description>Module1 Description</Description> 
     <AssemblyName>Assembly.Module1</AssemblyName> 
     <ModuleClass>Module1.class</ModuleClass> 
     <Enabled>true</Enabled> 
    </ModuleConfig> 
    <ModuleConfig> 
     <ModuleName>Module2</ModuleName> 
     <Description>Module2 Description</Description> 
     <AssemblyName>Assembly.Module2</AssemblyName> 
     <ModuleClass>Module2.class</ModuleClass> 
     <Enabled>true</Enabled> 
    </ModuleConfig> 
    </Modules> 
</FactoryConfig> 

Voici mon code MSBuild

<XmlPeek XmlInputPath="$(WebDir)FactoryConfig.xml" Query="/FactoryConfig/Modules"> 
    <Output TaskParameter="Result" ItemName="Peeked" /> 
</XmlPeek> 

<Message Text="Subtree: @(Peeked)" /> 

<XmlPoke XmlInputPath="$(WebDir)FactoryConfig.xml" Query="/FactoryConfig/Modules" Value="@(Peeked) 
     &lt;ModuleConfig&gt; 
     &lt;ModuleName&gt;Test&lt;/ModuleName&gt; 
     &lt;Description&gt;Test&lt;/Description&gt; 
     &lt;AssemblyName&gt;Test&lt;/AssemblyName&gt; 
     &lt;ModuleClass&gt;Test&lt;/ModuleClass&gt; 
     &lt;Enabled&gt;true&lt;/Enabled&gt; 
     &lt;/ModuleConfig&gt;"> 
</XmlPoke> 

Je peux ajouter une section dans le fichier xml. Mais je ne sais pas comment lire l'arbre existant sous forme de chaîne et le fusionner avec un nouveau et l'ajouter au fichier.

Si un module est déjà présent, il doit être remplacé.

+1

Peut-être plus facile d'écrire du code C# pour le faire, puis invoquer cela à partir de msbuild – stijn

+0

Oui, vous êtes probablement au point où vous voulez commencer à chercher peut-être écrire une tâche MSBuild personnalisée https://msdn.microsoft. com/fr-fr/library/t9883dzc.aspx – aolszowka

Répondre