如何更新从一个MSBuild脚本XML属性?(How do I update an XML attr

2019-08-01 03:50发布

我使用的MSBuild和的MSBuild社区任务 (使用的XMLUpdate和XMLMassUpdate )来更新我的web.config一件事各个部分已经我虽然难住了。 如果我有:

<configuration>
    <nlog throwExceptions="true" xmlns="http://www.nlog-project.org/schemas/NLog.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
       <targets>
            <target name="file" xsi:type="File" fileName="${logDirectory}\SomeLog.log" layout="${message}"/>
        </targets>
    </nlog> 
</configuration>

我尝试更换fileName中的target

<XmlUpdate XmlFileName="$(BuildDir)\Builds\%(Configuration.Identity)\_PublishedWebsites\Presentation\Web.config"
           XPath="//configuration/nlog/targets/target[@fileName]"
           Value="${logDirectory}\SomeLog_%(Configuration.Identity).log" />

它报告为无法找到任何更新,所以我的问题是我如何能得到的文件名属性更新?


编辑:难道这是命名空间冲突的情况下,作为NLOG部分定义自己的命名空间?


更新 :张贴的答案声明名称空间无法正常工作。

Answer 1:

第一个问题是XPath是不正确的更新属性,它目前正在寻找一个名为“文件名”,而不是一个节点被称为“目标”的“文件名”属性的属性“目标”节点。

你想要的XPath是:/配置/ n日志/目标/目的/ @文件名

至于命名空间问题, 普里特僧伽有正确的答案 ,你需要使用命名空间前缀,而这必须被应用到每个子元素为好,因为他们都在该命名空间。

最后的语句中:

<XmlUpdate
  Prefix="n"
  Namespace="http://www.nlog-project.org/schemas/NLog.xsd"
  XmlFileName="output.xml"
  XPath="//configuration/n:nlog/n:targets/n:target/@fileName"
  Value="${logDirectory}\UpdateWorked.log" />


Answer 2:

这里表示一个命名空间的要求

<XmlUpdate
   Namespace="http://schemas.microsoft.com/.NetConfiguration/v2.0"
   XmlFileName ....

您可以更新任何其他属性?



Answer 3:

为了完成给出的答案keeperofthesoul (我想你应该顺便说一句给他的奖金)看一看:

<XmlUpdate
  XmlFileName="web.config"
  XPath="//configuration/x:nlog/x:targets/x:target/@fileName"
  Value="%24{logDirectory}\SomeLog_%(Configuration.Identity).log"
  Prefix="x"
  Namespace="http://www.nlog-project.org/schemas/NLog.xsd"
  />

在这里我使用%24写出来的特殊字符$



文章来源: How do I update an XML attribute from an MSBuild script?