2009-02-02 10 views
5

Ich habe die Tigris-Community-Aufgaben verwendet, um verschiedene AppSettings-Schlüssel mithilfe der XMLUpdate-Aufgabe zu aktualisieren.Wie Sie einen XML-Knoten in MSBuild am besten aktualisieren

Jetzt, jedoch möchte ich einen Knoten zum System.net Abschnitt hinzufügen, um den Proxy einzurichten.

erklärte ich eine Immobilie

<PropertyGroup> 
    <proxy>&lt;defaultProxy&gt; &lt;proxy usesystemdefault="False" proxyaddress="http://IPADDRESS:PORT" /&gt; &lt;/defaultProxy&gt;</proxy> 
    </PropertyGroup> 

und die XMLUpdate Aufgabe sieht aus wie

<XmlUpdate 
Prefix="n" 
Namespace="http://schemas.microsoft.com/.NetConfiguration/v2.0" 
XmlFileName="$(BuildDir)\Builds\_PublishedWebsites\Presentation\Web.config" 
XPath="/n:configuration/n:system.net" 
Value="$(proxy)" /> 

diese aktualisiert die Web-Config aber es direkt aus der Immobiliengruppe aktualisiert wird also nicht die Escape-Zeichen konvertieren für die spitzen Klammern. Hat jemand irgendwelche Ideen?

Antwort

7

Sie könnten den XmlMassUpdate statt XmlUpdate Task verwenden.

<ProjectExtensions> 
    <defaultProxy> 
    <proxy usesystemdefault="False" proxyaddress="http://IPADDRESS:PORT"/> 
    </defaultProxy> 
</ProjectExtensions> 

<Target Name="SubstituteFromWebConfig"> 
    <XmlMassUpdate 
    NamespaceDefinitions="msb=http://schemas.microsoft.com/developer/msbuild/2003;n=http://schemas.microsoft.com/.NetConfiguration/v2.0" 
    ContentFile="$(BuildDir)\Builds\_PublishedWebsites\Presentation\Web.config" 
    ContentRoot="/n:configuration/n:system.net" 
    SubstitutionsFile="$(MSBuildProjectFullPath)" 
    SubstitutionsRoot="/msb:Project/msb:ProjectExtensions/msb:system.web" /> 
</Target> 

In diesem Beispiel ersetzen wir den Knoten durch ContentRoot in ContentFile von dem durch SubstitutionsRoot in SubstitutionsFile (Die aktuelle MSBuild Datei) wies eine spitz.

Diese Technik nutzt die MSBuild ProjectExtensions Element, die Sie erlaubt XML hinzufügen zu einer Projektdatei , die von der MSBuild-Modul werden ignoriert.

(Oder wenn Sie nicht XmlMassUpdate verwenden wollen, können Sie die XMLRead Aufgabe auf einem Knoten in ProjectExtensions und einem XmlUpdate verwenden.)