2009-02-02 23 views
5

He estado usando las tareas de la comunidad Tigris para actualizar varias claves AppSettings usando la tarea XMLUpdate.Cómo mejorar la actualización de un nodo XML en MSBuild

Ahora, sin embargo, deseo agregar un nodo a la sección system.net para configurar el proxy.

I declaró una propiedad

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

y se ve la tarea como XMLUpdate

<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)" /> 

esto actualiza el web.config sin embargo, las actualizaciones directamente desde el grupo de propiedades es decir, no convierte los caracteres de escape de los corchetes angulares. ¿Alguien tiene alguna idea?

Respuesta

7

Puede usar la tarea XmlMassUpdate en lugar de XmlUpdate.

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

En este ejemplo, reemplazar el nodo apuntado por ContentRoot en ContentFile por el señalado por SubstitutionsRoot en SubstitutionsFile (El archivo de MSBuild actual).

Esta técnica se aprovecha del elemento MSBuild ProjectExtensions que le permite añadir XML a un archivo de proyecto que será ignorado por el motor de MSBuild.

(O si no desea utilizar XmlMassUpdate, puede usar la tarea XmlRead en un nodo en ProjectExtensions y una XmlUpdate.)

Cuestiones relacionadas