XPath dans MSBuild (SDC) et WIX
-
03-07-2019 - |
Question
Poser de nouvelles questions à ce sujet - >
J'ai un fichier WIX que je dois modifier à l'aide de MSBuild. Ça commence comme ça:
<?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 ...-->
Mon problème est que les tâches du SDC ne semblent pouvoir faire référence à aucun des nœuds XML liés à WIX. Par exemple:
<XmlFile.SetAttribute Path="$(MSBuildProjectDirectory)\TestProduct.wxs"
XPath="//iis:WebApplication" Namespaces="@(Namespaces)"
Name="Name" Value="$(VersionTag)"/>
fonctionne très bien car il n'utilise aucun nœud Wix (juste un nœud iis), mais si j'utilise le chemin d'accès XPath complet ( / Wix / Product / iis: WebApplication ), la tâche résultats: Impossible de trouver la chaîne de ressource Aucune correspondance trouvée pour l'expression XPath
Cela ne pose pas de problème tant que je ne souhaite pas référencer un nœud d'annuaire (/ Wix / Produit / Répertoire / Répertoire / Répertoire / Répertoire [@ Id = 'STWebSiteDir'])
J'ai essayé d'utiliser le XPath complet et le répertoire // plus court [@ Id = 'STWebSiteDir']. J'ai essayé les guillemets simples et les guillemets doubles, j'ai essayé d'ajouter l'espace de nom WIX à l'appel (sans préfixe).
<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>
J'ai même essayé d'obtenir une référence à / Wix / Product et même cela échoue:
<XmlFile.SetAttribute Path="$(MSBuildProjectDirectory)\TestProduct.wxs"
XPath="/Wix/Product" Namespaces="@(Namespaces)"
Name="Name" Value="MODIFIED"/>
Il me manque clairement quelque chose. Quelqu'un sait-il où aller pour que cela fonctionne?
Vaccano
La solution
Pouvez-vous simplement définir les variables sur la ligne de commande pour le préprocesseur?
candle -dVariableName=ValueForVariable
Cela pourrait être beaucoup plus facile.
Autres conseils
Avez-vous inclus l'espace de noms Wix par défaut dans @ (Namespaces)?
<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>
vous devriez aussi ajouter un préfixe pour l'espace de noms wi, après quoi tout va bien, je l'ai testé.
OK, voici la réponse:
Le préfixe d'espace de nom devait être manquant pour la partie wix, pas seulement laissé vide
<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>
Ensuite, vous devez ajouter une valeur de préfixe à l'espace de noms wix du fichier. J'ai utilisé tst.
Vaccano