Задача XmlUpdate не обновляет мой XML-файл

У меня есть следующая задача в сценарии MSBuild:

<XmlUpdate
    Namespace="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd"
    XmlFileName="$(PackageDir)\temp\OddEnds.Testing\OddEnds.Testing.nuspec"
    XPath="/package/metadata/version"
    Value="%(OddEndsTestingAsmInfo.Version)" />

который должен обновить пустой version узел в файле спецификации NuGet с версией сборки. Мой файл.nuspec выглядит так:

<?xml version="1.0" encoding="utf-8"?>
<package xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http:www.w3.org/2001/XMLSchema-instance">
    <metadata xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
        <id>OddEnds</id>
        <authors>Tomas Lycken</authors>

        <!-- Here's the node I want to update -->
        <version></version>

        <owners>Tomas Lycken</owners>
        <description>Odd ends and bits that I might need in any project.</description>
    </metadata>
</package>

Я верю указатель XPath /package/metadata/version указывает на правый узел (поскольку, если я изменю его на что-то другое, он будет жаловаться на то, что не нашел узел), но в выводе 0 node(s) selected for update.

Что мне не хватает?

3 ответа

Возможно, вам придется включить пространство имен в строку xpath.

Проверьте это сообщение в блоге: http://www.lesnikowski.com/blog/index.php/update-nuspec-version-from-msbuild/

Вы также можете попробовать //*: версию. Это выберет все элементы версии независимо от пространства имен.

Ваша задача должна выглядеть так:

<XmlUpdate
    Prefix="xmlsucks"
    Namespace="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd"
    XmlFileName="$(PackageDir)\temp\OddEnds.Testing\OddEnds.Testing.nuspec"
    XPath="/xmlsucks:package/xmlsucks:metadata/xmlsucks:version"
    Value="%(OddEndsTestingAsmInfo.Version)" />

Не стесняйтесь менять префикс на любой уничижительный термин, который вы хотели бы использовать:-)

У меня была точно такая же проблема с NuGet, XmlUpdate, MSBuild и XPath.

В конце концов я переключился на задачу NuGetPack проекта MSBuild Community Tasks.
(Обратите внимание, что задачи NuGet (по крайней мере, на данный момент) доступны только в Nightly Build)

Добавление номера версии в ваш пакет NuGet через MSBuild с помощью этой задачи будет выглядеть примерно так:

<Target Name="NuGet">
  <GetAssemblyIdentity AssemblyFiles="$(BuildCompileDirectory)\$(AssemblyName).dll">
     <Output TaskParameter="Assemblies" ItemName="AssemblyIdentities"/>
  </GetAssemblyIdentity>

  <NuGetPack
    ToolPath="$(ToolsDirectory)"
    WorkingDirectory="$(BuildCompileDirectory)"
    File="$(SrcDirectory)\$(SolutionName).nuspec"
    Version="%(AssemblyIdentities.Version)"/>
</Target>

Надеюсь, это поможет!

Другие вопросы по тегам