Справка Обновление XML-файла с использованием MSBuild Extensions 4 с пространствами имен

У меня возникли некоторые проблемы с получением расширений MSBuild 4.0 для обновления XML-файла после включения пространства имен.

Когда у меня есть простой XML-файл без пространства имен, тогда нормально, но как только я пытаюсь обновить XML-файл, у которого установлено пространство имен, тогда ничего не происходит.. обратите внимание, что ошибки нет.

Вот простые, которые отлично работают

    <Project>
      <PropertyGroup>
        <ApplicationVersion>5.1.500.16</ApplicationVersion>
      </PropertyGroup>
      <PropertyGroup>
        <ApplicationVersion>old</ApplicationVersion>
      </PropertyGroup>
    </Project>

и файл проекта

    <Project ToolsVersion="4.0" DefaultTargets="Default" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
        <PropertyGroup>
            <TPath>C:\Program Files\MSBuild\ExtensionPack\4.0\MSBuild.ExtensionPack.tasks</TPath>
            <AssemblyVersion>5.1.500.18</AssemblyVersion>
        </PropertyGroup>
        <Import Project="$(TPath)"/>
        <Target Name="Default">
            <MSBuild.ExtensionPack.Xml.XmlFile TaskAction="RemoveElement"  "  File="c:\build\test.csproj"  XPath="/Project/PropertyGroup[1]/ApplicationVersion" />
        </Target>
    </Project>

Когда они ничего не делают!

    <?xml version="1.0" encoding="utf-8"?>
    <Project xmlns="http://mynamespace">
      <PropertyGroup>
        <ApplicationVersion>5.1.500.16</ApplicationVersion>
      </PropertyGroup>
      <PropertyGroup>
        <ApplicationVersion>old</ApplicationVersion>
      </PropertyGroup>
    </Project>

а также

    <Project ToolsVersion="4.0" DefaultTargets="Default" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
        <PropertyGroup>
            <TPath>C:\Program Files\MSBuild\ExtensionPack\4.0\MSBuild.ExtensionPack.tasks</TPath>
            <AssemblyVersion>5.1.500.18</AssemblyVersion>
        </PropertyGroup>
        <Import Project="$(TPath)"/>
        <ItemGroup>
            <Namespaces Include="Mynamespace">
                <Prefix>me</Prefix>
                <Uri>"http://mynamespace"</Uri>
            </Namespaces>
        </ItemGroup>
        <Target Name="Default">
            <MSBuild.ExtensionPack.Xml.XmlFile TaskAction="RemoveElement"  Namespaces="@(Namespaces)"  File="c:\build\test.csproj"  XPath="//me:Project/PropertyGroup[1]/ApplicationVersion" />
        </Target>
    </Project>

Так в чем же дело? что мне не хватает? Это форматирование XPath во втором экземпляре? Я пробовал все виды вариаций.

2 ответа

Попробуй это:

    <Target Name="Default">
        <MSBuild.ExtensionPack.Xml.XmlFile TaskAction="RemoveElement"  Namespaces="@(Namespaces)"  File="c:\build\test.csproj"  XPath="//me:Project/me:PropertyGroup[1]/me:ApplicationVersion" />
    </Target>

(префикс пространства имен перед каждым элементом xpath)

В дополнение к совету, приведенному в другом ответе, удалите цитаты из Uri метаданные в Namespace вещь.

Обратите внимание, что согласно примечанию для параметра префикса в документации MSDN, указание пустой строки для Prefix метаданные никогда не будут работать.

Другие вопросы по тегам