Как обновить атрибут 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 для записи специального символа $.