如何从MSBuild脚本更新XML属性?

前端之家收集整理的这篇文章主要介绍了如何从MSBuild脚本更新XML属性?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在使用 MSBuildMSBuild Community Tasks(使用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

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

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

编辑:这可能是名称空间冲突的情况,因为NLog部分定义自己的命名空间?

更新:发布的答案声明名称空间不起作用.

第一个问题是xpath对于更新属性是不正确的,它当前正在使用名为“fileName”的属性找到“target”节点,而不是名为“target”的节点的“fileName”属性.

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

对于命名空间问题Preet Sangha has the correct answer for that,您需要使用命名空间前缀,并且必须将其应用于每个子元素,因为它们都在该命名空间中.

最后的声明是:

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

猜你在找的XML相关文章