Задача XmlUpdate не обновляет мой XML-файл - PullRequest
4 голосов
/ 03 марта 2011

У меня есть следующая задача в скрипте 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 ]

2 голосов
/ 03 марта 2011

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

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

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

1 голос
/ 18 сентября 2012

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

<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)" />

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

1 голос
/ 05 февраля 2012

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

В итоге я переключился на задачу NuGetPack проекта Задачи сообщества MSBuild .
(Обратите внимание, что задачи NuGet (по крайней мере, на данный момент) доступны только в Ночная сборка )

Добавление номера версии в ваш пакет 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>

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

...