Задача 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>
Надеюсь, это поможет!