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

È stato utile?

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top