encabezado código agrega wix wix3.5 heat

código - Cosechando múltiples directorios en WiX



meta tags wix (3)

En lugar de usar heat en cada carpeta de Feature* , puede cosechar toda la carpeta de diseño de características que ha creado y transformar los resultados. Supongo que cada subcarpeta es una característica. Es una simple cuestión de crear un ComponentGroup para cada uno que haga referencia a todos los componentes debajo de él.

Luego usaría los grupos de componentes como este:

<Feature Id="FeatureA"> <ComponentGroupRef Id="FeatureA"/> </Feature> <Feature Id="FeatureB"> <ComponentGroupRef Id="FeatureB"/> </Feature>

Comando de calor (de hecho, uso el objetivo HarvestDirectory en WiX 3.7):

Heat.exe dir FeatureLayout -dr FeatureLayoutDir -srd -ag -sfrag -t FeatureLayout.xslt -out obj/Debug/__dir.wxs

FeatureLayout.xslt:

<?xml version="1.0" encoding="utf-8"?> <xsl:stylesheet version="2.0" xmlns:wix="http://schemas.microsoft.com/wix/2006/wi" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" exclude-result-prefixes="wix" > <xsl:output method="xml" indent="yes"/> <xsl:template match="wix:Wix"> <xsl:copy> <xsl:apply-templates select="@* | node()"/> <xsl:for-each select="wix:Fragment/wix:DirectoryRef/wix:Directory"> <wix:Fragment> <wix:ComponentGroup Id="{@Name}"> <xsl:for-each select="descendant::wix:Component"> <wix:ComponentRef Id="{@Id}"/> </xsl:for-each> </wix:ComponentGroup> </wix:Fragment> </xsl:for-each> </xsl:copy> </xsl:template> <xsl:template match="@* | node()"> <xsl:copy> <xsl:apply-templates select="@* | node()"/> </xsl:copy> </xsl:template> </xsl:stylesheet>

Intento crear un instalador que incluya varias características y estoy usando calor para recopilar un directorio de archivos para cada característica.
Mi estructura de directorio fuente se ve así:

HarvestDir /FeatureA /FeatureImpl.dll /FeatureImpl2.dll /FeatureB /FeatureImpl.dll /FeatureImpl2.dll

Así que ejecuto heat.exe para cada característica para crear un fragmento para cada característica pero obtengo básicamente fragmentos idénticos, por ejemplo

[...] Source="SourceDir/FeatureImpl.dll" [...] Source="SourceDir/FeatureImpl2.dll"

Lo que realmente quiero es algo como esto:

[...] Source="SourceDir/FeatureA/FeatureImpl.dll" [...] Source="SourceDir/FeatureA/FeatureImpl2.dll"

y

[...] Source="SourceDir/FeatureB/FeatureImpl.dll" [...] Source="SourceDir/FeatureB/FeatureImpl2.dll"

Podría usar -var para especificar una variable separada para representar la ubicación de origen para cada característica, pero luego tendría que pasar valores para estas variables en el wixproj (y voy a tener ~ 10 características).

Entonces, ¿hay alguna manera de que pueda incluir una ruta relativa en mi fragmento cosechado?


Puede asignar sus rutas de origen en .wixproj en DefinirConstantes o puede asignarlas en un archivo de inclusión de WIX, pero de cualquier forma tendrá que usar la opción "var" para especificar la variable que se utiliza para sus fuentes.

Si desea usar DefineConstant en wixproj, entonces tendrá que hacer algo como

<Target Name="BeforeBuild"> <PropertyGroup> <DefineConstants>BINFOLDER=../PATH/TO/SOURCE/$(Configuration)</DefineConstants> </PropertyGroup> <HeatDirectory OutputFile="output.wxs" Directory="../PATH/TO/SOURCE/$(Configuration)" DirectoryRefId="INSTALLFOLDER" ComponentGroupName="COMPONENTGROUPNAME" ToolPath="$(WixToolPath)" PreprocessorVariable="var.BINFOLDER" /> </Target>

En la tarea de Calor, asegúrese de agregar los atributos adicionales que pueda necesitar. En caso de que haya agregado una referencia a su proyecto fuente en .wixproj, entonces puede usar directamente las variables de referencia del proyecto en el atributo "PreprocessorVariable". Por ejemplo, en lugar de var.BINFOLDER use var.MyProject.TargetDir.

Si desea utilizar un archivo de inclusión WIX (.wxi), entonces declare sus variables en un archivo de inclusión, por ejemplo Variables.wxi:

<?xml version="1.0" encoding="UTF-8"?> <Include> <?define PATH1="PATH/TO/SOURCE"?> <?define PATH2="$(var.PATH1)/$(Configuration)"?> </Include>

Ahora necesitará pasar PATH1 y PATH2 usando el -var en la línea de comando de calentamiento. Una vez que tenga su archivo .wxs, deberá incluir el archivo Variables.wxi en ese

<?include Variables.wxi ?>

en tu .wxs. El problema de esta manera es que deberá agregar manualmente esta directiva include cada vez que genere sus archivos fuente WIX o tendrá que inyectarla usando XSL Transformation.


golpear propiedades para el proyecto de configuración, este es el comando que estoy usando:

"%WIX%/bin/heat.exe" dir "$(SolutionDir)/Export/Release" -suid -dr bin -srd -cg ExportComponentGroup -var var.sourcePath -ag -sreg -out "$(SolutionDir)/SetupProject/AppExportDir.wxs"

Lo único que debe definir en la pestaña de compilación es: marque la casilla de verificación para "definir" la variable de preprocesador de depuración "y escriba.

sourcePath=%SystemDrive%/App/Main/Export/Release/

esto por favor asegúrate de usar las banderas que quieras como suid o -dr

para obtener más información acerca de las banderas que ve aquí: http://wix.sourceforge.net/manual-wix3/heat.htm