XPath in MSBuild (SDC) e WIX
-
03-07-2019 - |
Domanda
Nuova domanda di questa domanda- >
Ho un file WIX che devo modificare usando MSBuild. Inizia così:
<?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 ...-->
Il mio problema è che le attività SDC non sembrano fare riferimento a nessuno dei nodi XML correlati a WIX. Ad esempio:
<XmlFile.SetAttribute Path="$(MSBuildProjectDirectory)\TestProduct.wxs"
XPath="//iis:WebApplication" Namespaces="@(Namespaces)"
Name="Name" Value="$(VersionTag)"/>
funziona bene perché non usa alcun nodo Wix (solo uno iis), ma se uso l'intero percorso XPath ( / Wix / Product / iis: WebApplication ) l'attività ritorna: Impossibile trovare la stringa di risorse Nessuna corrispondenza trovata per l'espressione XPath
Questo non è un problema fino a quando non voglio fare riferimento a un nodo Directory (/ Wix / Product / Directory / Directory / Directory / Directory [@ Id = 'STWebSiteDir'])
Ho provato a utilizzare l'intero XPath e il // Directory più breve [@ Id = 'STWebSiteDir']. Ho provato virgolette singole e doppie virgolette, ho provato ad aggiungere lo spazio dei nomi WIX alla chiamata (senza prefisso).
<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>
Ho persino provato a ottenere un riferimento a / Wix / Product e anche questo non riesce:
<XmlFile.SetAttribute Path="$(MSBuildProjectDirectory)\TestProduct.wxs"
XPath="/Wix/Product" Namespaces="@(Namespaces)"
Name="Name" Value="MODIFIED"/>
Mi manca chiaramente qualcosa. Qualcuno con un suggerimento su dove andare per farlo funzionare?
Vaccano
Soluzione
Puoi semplicemente definire le variabili sulla riga di comando per il preprocessore?
candle -dVariableName=ValueForVariable
Potrebbe essere molto più semplice.
Altri suggerimenti
Hai incluso lo spazio dei nomi predefinito Wix in @ (Namespace)?
<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>
dovresti aggiungere anche un prefisso per lo spazio dei nomi wi, dopodiché può andare bene, l'ho provato.
OK, quindi ecco la risposta:
Il prefisso dello spazio dei nomi doveva mancare per la parte wix, non solo lasciato vuoto
<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>
E quindi è necessario aggiungere un valore di prefisso allo spazio dei nomi di Wix nel file. Ho usato tst.
Vaccano