XPath en MSBuild (SDC) y WIX
-
03-07-2019 - |
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
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