Обновление XML-файла (vsixmanifest)
Я создаю пакет Visual Studio 2013 (vsix) (бесстыдный плагин: pMixins). В рамках моего стремления использовать TeamCity в качестве сервера непрерывной интеграции я настроил Team City для создания пакета.vsix (пакет Visual Studio (vsix) - Team City без установленной Visual Studio).
Теперь я хочу настроить Team City для установки версии в схеме VSIX:
<?xml version="1.0" encoding="utf-8"?>
<PackageManifest
Version="2.0.0"
xmlns="http://schemas.microsoft.com/developer/vsx-schema/2011"
xmlns:d="http://schemas.microsoft.com/developer/vsx-schema-design/2011">
<Metadata>
<Identity Version="1.0" Language="en-US" Publisher="Company" />
Следуя совету в разделе Использование msbuild, я хочу обновить файл конфигурации значениями из teamcity и Как мне обновить атрибут XML из скрипта MSBuild? Я обновил Microsoft.VsSDK.targets
использовать XmlPoke со следующей целью:
<Target
Name="UpdateVSIXVersion"
BeforeTargets="PrepareForBuild"
Condition="$(VSIXVersion) != '' And $(VSIXVersion) != '*Undefined*'">
<Message Text= "Updating VSIX Version" />
<XmlPoke
XmlInputPath="source.extension.vsixmanifest"
Query="/PackageManifest/Metadata/Identity/@Version"
Value="$(VSIXVersion)">
</XmlPoke>
</Target>
Я обновил Team City системным параметром, чтобы установить VSIXVersion
:
Но когда я проверял TeamCity, он сделал 0 замен:
Как заставить Team City корректно обновить XML-файл.vsixmanifest?
1 ответ
После долгих поисков я наконец обнаружил, что XmlPoke ожидает namespace
когда файл Xml содержит пространство имен, даже для пространства имен по умолчанию ( изменение файла.config в проекте MSBuild).
Однако я не смог найти никакой документации для XmlPoke.Namespaces
параметр и приведенный выше код не работает. После долгих пробных ошибок я наконец-то понял, что нужно работать с этим:
<Target
Name="UpdateVSIXVersion"
BeforeTargets="PrepareForBuild"
Condition="$(VSIXVersion) != '' And $(VSIXVersion) != '*Undefined*'">
<Message Text= "Updating VSIX Version" />
<XmlPoke
XmlInputPath="source.extension.vsixmanifest"
Query="/n:PackageManifest/n:Metadata/n:Identity/@Version"
Value="$(VSIXVersion)"
Namespaces="<Namespace Prefix='n' Uri='http://schemas.microsoft.com/developer/vsx-schema/2011' Name='DoNotKnowWhatThisIsFor-ButItIsRequired' />">
</XmlPoke>
Заметки:
- Для этого необходимо настроить MSBuild 12 в Team City
- Пространства имен должны быть экранированы.
- Параметр Name является обязательным, иначе MSBuild выдаст ошибку
- Исходный запрос XPath должен был быть обновлен искусственным префиксом пространства имен.
Файл MSBuild находится на Github, если он кому-то нужен: https://github.com/ppittle/pMixins/blob/master/tools/vssdk_tools/v12.0/VSSDK/Microsoft.VsSDK.targets