XPath в MSBuild (SDC) и WIX
-
03-07-2019 - |
Вопрос
Свежая постановка этого Вопроса->
У меня есть файл WIX, который мне нужно изменить с помощью MSBuild.Все начинается вот так:
<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"
xmlns:iis="http://schemas.microsoft.com/wix/IIsExtension">
<?--... Various Removed Params ...-->
<Product Id='$(var.ProductCode)'
UpgradeCode='$(var.UpgradeCode)'
Name='$(var.AppName)' Language="1033" Version='$(var.ProductVersion)'
Manufacturer='$(var.Manufacturer)'>
<Package Id='$(var.PackageCode)' InstallerVersion="200"
Compressed="yes" />
<?--... More of the WIX XML file ...-->
<iis:WebApplication Id='STWebApp' Name='MyWebSite' Isolation='medium' />
<?--... Rest of the WIX XML file ...-->
Моя проблема в том, что задачи SDC, похоже, не могут ссылаться ни на один из xml-узлов, связанных с WIX.Например:
<XmlFile.SetAttribute Path="$(MSBuildProjectDirectory)\TestProduct.wxs"
XPath="//iis:WebApplication" Namespaces="@(Namespaces)"
Name="Name" Value="$(VersionTag)"/>
работает просто отлично, потому что он не использует никаких узлов Wix (только iis), но если я использую полный путь XPath к нему (/Wix/Продукт/iis:веб-приложение) задача возвращает: Не удалось найти строку ресурса, совпадений для выражения XPath не найдено
Это не проблема, пока я не захочу ссылаться на узел каталога (/Wix/Product/Directory /Каталог /DirectoryDirectory[@Id='STWebSiteDir'])
Я попытался использовать полный XPath и более короткий каталог //[@Id='STWebSiteDir'].Я пробовал одинарные и двойные кавычки, Я попытался добавить пространство имен WIX к вызову (без префикса).
<ItemGroup>
<Namespaces Include="http://schemas.microsoft.com/wix/IIsExtension">
<Prefix>iis</Prefix>
<Uri>http://schemas.microsoft.com/wix/IIsExtension</Uri>
</Namespaces>
<Namespaces Include="http://schemas.microsoft.com/wix/2006/wi">
<Prefix></Prefix>
<Uri>http://schemas.microsoft.com/wix/2006/wi</Uri>
</Namespaces>
</ItemGroup>
Я даже пытался просто получить ссылку на / Wix / Product, но даже это не удалось:
<XmlFile.SetAttribute Path="$(MSBuildProjectDirectory)\TestProduct.wxs"
XPath="/Wix/Product" Namespaces="@(Namespaces)"
Name="Name" Value="MODIFIED"/>
Я явно чего-то не понимаю.У кого-нибудь есть подсказка, куда обратиться, чтобы это заработало?
Ваккано
Решение
Можете ли вы просто определить переменные в командной строке для препроцессора?
candle -dVariableName=ValueForVariable
Это могло бы быть намного проще.
Другие советы
Включили ли вы пространство имен Wix по умолчанию в @(Пространства имен)?
<ItemGroup>
<Namespaces Include="http://schemas.microsoft.com/wix/IIsExtension">
<Prefix>iis</Prefix>
<Uri>http://schemas.microsoft.com/wix/IIsExtension</Uri>
</Namespaces>
<Namespaces Include="http://schemas.microsoft.com/wix/2006/wi">
<Prefix>wis</Prefix>
<Uri>http://schemas.microsoft.com/wix/2006/wi</Uri>
</Namespaces>
</ItemGroup>
вы также должны добавить префикс для пространства имен wi, после этого все может быть в порядке, я должен это протестировать.
Хорошо, итак, вот ответ:
Префикс пространства имен должен был отсутствовать для части wix, а не просто оставаться пустым
<ItemGroup>
<Namespaces Include="http://schemas.microsoft.com/wix/IIsExtension">
<Prefix>iis</Prefix>
<Uri>http://schemas.microsoft.com/wix/IIsExtension</Uri>
</Namespaces>
<Namespaces Include="http://schemas.microsoft.com/wix/2006/wi">
<Uri>http://schemas.microsoft.com/wix/2006/wi</Uri>
</Namespaces>
</ItemGroup>
И затем вам нужно добавить значение префикса к пространству имен wix в файле.Я использовал tst.
Ваккано