如何从MSBuild脚本更新XML属性?
我正在使用and(使用XMLUpdate和)来更新Web.config的各个部分,但有一件事让我感到困惑。如果我有:如何从MSBuild脚本更新XML属性?,xml,msbuild,msbuildcommunitytasks,Xml,Msbuild,Msbuildcommunitytasks,我正在使用and(使用XMLUpdate和)来更新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>
<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属性更新
编辑:当NLog部分定义自己的名称空间时,是否会发生名称空间冲突
更新:声明名称空间的已发布答案无效。它表示名称空间的要求
<XmlUpdate
Namespace="http://schemas.microsoft.com/.NetConfiguration/v2.0"
XmlFileName ....
第一个问题是xpath在更新属性时不正确,它当前正在查找具有名为“fileName”属性的“target”节点,而不是名为“target”的节点的“fileName”属性
您需要的xpath是:
/配置/nlog/targets/target/@fileName
至于名称空间问题,您需要使用名称空间前缀,这也必须应用于每个子元素,因为它们都在该名称空间中
最后声明如下:
<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" />
要完成(我想你应该给他奖金)给出的答案,请看:
<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
写出特殊字符$
这很有帮助,但不能解决手头的问题。我还有其他XMLUpdate任务,这些任务没有声明名称空间,但更新正确
<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"
/>