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 更新元素:/MyConfiguration/Settings/RetentionTime。内文:30

没有错误,构建成功。但是,当我之后打开 XML 文件时,RetentionTime 元素仍然是空的。

如果我将 XPath 更改为不存在的元素,则会出现错误,所以这应该是正确的。你知道我是否遗漏了什么吗?我不明白...

4

1 回答 1

2

一个陷阱是目标文件声明了默认命名空间。此命名空间必须在 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 回答