0

次のテストコードを取得しました。

<Target Name="TestTarget">
    <MSBuild.ExtensionPack.Xml.XmlFile
        TaskAction="UpdateElement"
    File="@(ConfigurationFile)"
    XPath="/MyConfiguration/Settings/RetentionTime"
        InnerText="$(RetentionTime)"/>
</Target>

(ConfigurationFile は ItemGroup 内にあり、別の場所で FullName が必要なため、便利です)

出力は次のとおりです。 XmlFile: C:\Development\Test\build\Test.xml Update Element: /MyConfiguration/Settings/RetentionTime. インナーテキスト: 30

エラーはありません。ビルドは成功しました。ただし、後で XML ファイルを開くと、RetentionTime 要素はまだ空です。

XPath を存在しない要素に変更すると、エラーが発生するため、これは正しいはずです。私が何かを見逃しているかどうか知っていますか?理解できません...

4

1 に答える 1

2

1 つの落とし穴は、ターゲット ファイルが既定の名前空間を宣言する場合です。この名前空間は、xpath で提供する必要があります。

<Target Name="TestTarget">
    <ItemGroup
      <_namespaces Include="MyNamespace">
        <Prefix>mns</Prefix>
        <Uri>http://myNamespace</Uri>
      </_namespaces>
    </ItemGroup>

    <MSBuild.ExtensionPack.Xml.XmlFile
        TaskAction="UpdateElement"
    File="@(ConfigurationFile)"
    XPath="/mns:MyConfiguration/mns:Settings/mns:RetentionTime"
        InnerText="$(RetentionTime)"
        Namespaces="@(_namespaces)"/>
</Target>
于 2012-09-10T07:05:31.800 に答える