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

Était-ce utile?

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top