5

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

但是,现在我想向 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 配置,但它会直接从属性组更新,即不会转换尖括号的转义字符。有没有人有任何想法?

4

1 回答 1

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> 

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

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

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

于 2009-02-03T07:07:46.083 回答