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>

それで、取引は何ですか?私は何が欠けていますか?2番目のインスタンスでの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 に答える