2009-05-04 6 views
0

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

+0

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' –

Répondre

3

Pouvez-vous définir simplement les variables sur la ligne de commande au préprocesseur?

candle -dVariableName=ValueForVariable 

Cela pourrait être beaucoup plus facile.

1

Avez-vous inclus l'espace de noms par défaut Wix dans @ (espaces de noms)?

+0

Je ne dois pas vous comprendre parce que j'ai l'espace de noms WIx là dans ma question !! !!! – Vaccano

+0

Je n'ai pas assez de points ou je vous aurais rejeté. – Vaccano

+0

Donc la solution que vous avez ci-dessous est ce que je tentais de dire. La valeur par défaut est différente de Empty. –

0

OK, alors voici la réponse:

Le préfixe d'espace de noms devait être manquant pour la partie Wix, non 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> 

Et alors vous devez ajouter une valeur de préfixe au wix namespace dans le fichier. J'ai utilisé tst.

Vaccano

1
<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 ajouter un préfixe pour l'espace de noms wi aussi, après que ça puisse aller, je l'ai testé.