Справка Обновление XML-файла с использованием MSBuild Extensions 4 с пространствами имен - PullRequest
2 голосов
/ 09 мая 2011

У меня возникли проблемы с получением расширений 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 ]

4 голосов
/ 20 мая 2011

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

    <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)

0 голосов
/ 14 марта 2013

В дополнение к совету, данному в другом ответе , удалите кавычки из метаданных Uri в элементе Namespace.

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

...