de Vente frais de cette question->XPath dans MSBuild (DDC) et WIX
J'ai un fichier WIX que je dois modifier à l'aide MSBuild. Il commence comme ceci:
<?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 les tâches de la DDC ne semblent pas faire référence à l'un des noeuds xml qui sont liés Wix. Par exemple:
<XmlFile.SetAttribute Path="$(MSBuildProjectDirectory)\TestProduct.wxs"
XPath="//iis:WebApplication" Namespaces="@(Namespaces)"
Name="Name" Value="$(VersionTag)"/>
fonctionne très bien parce qu'il n'utilise pas de nœuds Wix (juste un de iis un), mais si j'utilise le chemin XPath complet il (/Wix/Produit/iis: WebApplication) le retour de la tâche: N'a pas pu trouver chaîne de ressource Aucun résultat trouvé pour l'expression XPath
Ce n'est pas un problème jusqu'à ce que je veux faire référence à un noeud de répertoire (/ Wix/produit/Répertoire/Répertoire/Répertoire/Répertoire [@ Id = 'STWebSiteDir'])
I J'ai essayé d'utiliser le XPath complet et le // répertoire plus court [@ Id = 'STWebSiteDir']. J'ai essayé des guillemets simples et des guillemets, J'ai essayé d'ajouter l'espace de noms 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é de simplement obtenir une référence à/Wix/produit et même qui ne:
<XmlFile.SetAttribute Path="$(MSBuildProjectDirectory)\TestProduct.wxs"
XPath="/Wix/Product" Namespaces="@(Namespaces)"
Name="Name" Value="MODIFIED"/>
je manque clairement quelque chose. Quelqu'un avec un indice sur où aller pour que cela fonctionne?
Vaccano
Si votre moteur XPath est standard, il s'agit de FAQ: un test QName sans préfixe sélectionne des éléments dans l'URI d'espace de noms nul (ou vide), pas dans l'espace de noms par défaut. Donc, vous devez enregistrer l'URI d'espace de noms et le préfixe de liaison et ajouter ce préfixe à votre chemin, à savoir: '/ wi: Wix/wi: Product' –