MSBuild, MSBuild.ExtensionPack.Xml.XmlFile не обновляет файл

Я получил следующий тестовый код:

<Target Name="TestTarget">
    <MSBuild.ExtensionPack.Xml.XmlFile
        TaskAction="UpdateElement"
    File="@(ConfigurationFile)"
    XPath="/MyConfiguration/Settings/RetentionTime"
        InnerText="$(RetentionTime)"/>
</Target>

(ConfigurationFile находится внутри ItemGroup, где-то еще мне нужно полное имя, и поэтому оно пригодится)

Результат: XmlFile: C:\Development\Test\build\Test.xml Элемент обновления: /MyConfiguration/Settings/RetentionTime. Внутренний текст: 30

Ошибок нет, сборка прошла успешно. Однако, когда я впоследствии открываю файл XML, элемент RetentionTime по-прежнему пуст.

Если я изменю XPath на несуществующий элемент, произойдет ошибка, так что это должно быть правильно. Вы знаете, если я что-то пропустил? я не понимаю...


person D.R.    schedule 07.09.2012    source источник
comment
РЕШЕНО: Хотя в документации указано иное, представляется обязательным указывать атрибут Namespaces и использовать пространства имен в XPath!   -  person D.R.    schedule 10.09.2012


Ответы (1)


Одна из ловушек — это когда целевой файл объявляет пространство имен по умолчанию. Это пространство имен должно быть предоставлено в xpath:

<Target Name="TestTarget">
    <ItemGroup
      <_namespaces Include="MyNamespace">
        <Prefix>mns</Prefix>
        <Uri>http://myNamespace</Uri>
      </_namespaces>
    </ItemGroup>

    <MSBuild.ExtensionPack.Xml.XmlFile
        TaskAction="UpdateElement"
    File="@(ConfigurationFile)"
    XPath="/mns:MyConfiguration/mns:Settings/mns:RetentionTime"
        InnerText="$(RetentionTime)"
        Namespaces="@(_namespaces)"/>
</Target>
person Michael    schedule 10.09.2012