Как обновить атрибут XML из MSBuild script?
Я использую 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" />
Сообщается, что он не может найти что-либо для обновления, поэтому мой вопрос заключается в том, как обновить атрибут имени файла?
EDIT:. Может ли это быть причиной конфликтов пространства имен, поскольку раздел NLog определяет собственное пространство имен?
ОБНОВЛЕНИЕ. Опубликованный ответ, объявляющий пространство имен, не работает.
Ответы
Ответ 1
Первой проблемой является неверный xpath для обновления атрибута, в настоящее время он ищет "целевые" узлы с атрибутом "имя_файла", а не атрибут "fileName" a node, называемый "target".
xpath, который вы хотите:
/Конфигурация/Nlog/цель/цель/@имя_файл
Что касается проблемы с пространством имен, У Preet Sangha есть правильный ответ для этого, вам нужно использовать префикс пространства имен, и это необходимо применять к каждому подэлементу также, поскольку все они находятся в этом пространстве имен.
Заключительное утверждение:
<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" />
Ответ 2
Здесь он указывает на требование пространства имен
<XmlUpdate
Namespace="http://schemas.microsoft.com/.NetConfiguration/v2.0"
XmlFileName ....
можете ли вы обновить любой другой атрибут?
Ответ 3
Чтобы выполнить ответ, полученный keeperofthesoul (я думаю, вы должны дать ему щедрость btw), посмотрите:
<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
для записи специального символа $
.