2

一旦涉及命名空间,我在让 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 的格式吗?我尝试了各种变化。

4

2 回答 2

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

于 2011-05-20T11:20:07.377 回答
0

除了其他答案中给出的建议Uri之外,请从项目中的元数据中删除引号Namespace

请注意,根据MSDN 文档中前缀参数的注释,为元数据指定空字符串Prefix将永远不会起作用。

于 2013-03-14T12:31:10.017 回答