Pregunta

Nueva pregunta de esta pregunta- >

Tengo un archivo WIX que necesito modificar usando MSBuild. Comienza así:

<?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 ...-->

Mi problema es que las tareas de la SDC no parecen hacer referencia a ninguno de los nodos xml relacionados con WIX. Por ejemplo:

<XmlFile.SetAttribute Path="$(MSBuildProjectDirectory)\TestProduct.wxs"
         XPath="//iis:WebApplication" Namespaces="@(Namespaces)" 
         Name="Name" Value="$(VersionTag)"/>

funciona bien porque no usa ningún nodo Wix (solo uno es uno), pero si uso la ruta completa de XPath ( / Wix / Product / iis: WebApplication ) la tarea devoluciones:      No se pudo encontrar la cadena de recursos. No se encontraron coincidencias para la expresión XPath

Esto no es un problema hasta que quiero hacer referencia a un nodo del Directorio (/ Wix / Product / Directory / Directory / Directory / Directory [@ Id = 'STWebSiteDir'])

He intentado usar el XPath completo y el // Directorio [@ Id = 'STWebSiteDir' más corto]. He intentado comillas simples y comillas dobles, He intentado agregar el espacio de nombres WIX a la llamada (sin prefijo).

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

Incluso he intentado obtener una referencia a / Wix / Product e incluso eso falla:

<XmlFile.SetAttribute Path="$(MSBuildProjectDirectory)\TestProduct.wxs" 
            XPath="/Wix/Product" Namespaces="@(Namespaces)" 
            Name="Name" Value="MODIFIED"/>

Claramente me falta algo. ¿Alguien con una pista sobre dónde ir para que esto funcione?

Vaccano

¿Fue útil?

Solución

¿Puede definir las variables en la línea de comandos para el preprocesador?

candle -dVariableName=ValueForVariable

Eso podría ser mucho más fácil.

Otros consejos

¿Ha incluido el espacio de nombres predeterminado de Wix en @ (Espacios de nombres)?

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

también debe agregar un prefijo para el espacio de nombres wi, después de eso puede estar bien, lo he probado.

OK, así que aquí está la respuesta:

El prefijo del espacio de nombres faltaba para la parte wix, no solo para dejarlo vacío

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

Y luego debe agregar un valor de prefijo al espacio de nombres wix en el archivo. Utilicé tst.

Vaccano

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top