帮助使用带命名空间的MSBuild Extensions 4更新XML文件

时间:2011-05-09 01:32:29

标签: msbuild-4.0 msbuildextensionpack

一旦涉及命名空间,我在使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>

Wheras这些什么都不做!

    <?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 个答案:

答案 0 :(得分:4)

试试这个:

    <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元素之前的名称空间前缀)

答案 1 :(得分:0)

除了the advice given in the other answer之外,请从Uri项目中的Namespace元数据中删除引号。

请注意,根据the MSDN documentation中前缀参数的注释,指定Prefix元数据的空字符串将永远不会有效。