2009-02-02 66 views
5

我一直在使用Tigris社區任務來使用XMLUpdate任務更新各種AppSettings密鑰。如何最好地更新MSBuild中的XML節點

現在,但是我想添加一個節點到system.net部分來設置代理。

我聲明的屬性

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

和任務的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)" /> 

這將更新web配置但它直接更新從屬性組即不轉換轉義字符尖括號。有沒有人有任何想法?

回答

7

您可以使用XmlMassUpdate而不是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> 

在這個例子中,我們通過一個由SubstitutionsRootSubstitutionsFile(當前的MSBuild文件)指出替換由ContentRootContentFile指向的節點。

這種技術利用了的MSBuild ProjectExtensions元素它允許您添加XML到項目文件將由MSBuild引擎被忽略的。

(或者如果您不想使用XmlMassUpdate,則可以在ProjectExtensions和XmlUpdate中的節點上使用XmlRead任務。)