Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何最好地更新MSBuild中的XML节点_Xml_Msbuild_Web Config_Msbuildcommunitytasks - Fatal编程技术网

如何最好地更新MSBuild中的XML节点

如何最好地更新MSBuild中的XML节点,xml,msbuild,web-config,msbuildcommunitytasks,Xml,Msbuild,Web Config,Msbuildcommunitytasks,我一直在使用Tigris社区任务来使用XMLUpdate任务更新各种AppSettings键 但是,现在我想在system.net部分添加一个节点来设置代理 我申报了一笔财产 <PropertyGroup> <proxy>&lt;defaultProxy&gt; &lt;proxy usesystemdefault="False" proxyaddress="http://IPADDRESS:PORT" /&gt; &lt;

我一直在使用Tigris社区任务来使用XMLUpdate任务更新各种AppSettings键

但是,现在我想在system.net部分添加一个节点来设置代理

我申报了一笔财产

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

defaultProxy代理usesystemdefault=“False”代理地址=”http://IPADDRESS:PORT“//默认代理
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配置,但它直接从属性组更新,即不转换尖括号的转义字符。有人有什么想法吗

您可以使用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> 

在本例中,我们将ContentFile中ContentRoot指向的节点替换为SubstitutionsFile(当前MSBuild文件)中SubstitutionsRoot指向的节点

此技术利用了msbuildprojectextensions元素,该元素允许您将XML添加到项目文件中,该文件将被MSBuild引擎忽略

(或者,如果不想使用XmlMassUpdate,可以在ProjectExtensions和XmlUpdate中的节点上使用XmlRead任务。)