2010-06-10 29 views
8

¿Es posible tener una configuración de instalación condicional, esclava con el entorno de configuración de Visual Studio?Instalación condicional con Wix

Por ejemplo, al seleccionar configuración DEBUG o RELEASE, Wix selecciona diferentes ejecutables en la instalación construida.

Básicamente voy a construir diferentes instalaciones de los mismos proyectos, pero difieren por los componentes. Algunos componentes se crean a partir del mismo proyecto, pero se crean con diferentes opciones de preprocesador.

Por supuesto, es posible incluir todos los componentes necesarios y luego definir características para seleccionar un componente específico para la instalación, pero no quiero realmente redistribuir algunos ejecutables.

¿Construir diferentes proyectos Wix es la única solución?

Respuesta

6

Utilice el preprocesador, por ejemplo: <?if?> para incluir/excluir componentes de manera condicional en función de la configuración.

+0

¡No he pensado que Wix pudiera tener preprocesamiento! Encontré al hombre http://wix.sourceforge.net/manual-wix2/preprocessor.htm – Luca

8

Sus scripts wix tienen acceso a los parámetros de compilación, como la Configuración ('depurar' o 'liberar'). Por lo tanto, se puede incluir condicionalmente los binarios correctos para la configuración actual referenciando $ (var.Configuartion) en sus declaraciones componentes:

<Component Id="myProject.dll" 
       DiskId="1" 
       Guid="*"> 
    <File Id="myProject.dll" 
      Name="myProject.dll" 
      Source="..\myProject\bin\$(var.Configuration)\myProject.dll" /> 
</Component> 

Cuando se ejecuta la acumulación en modo de lanzamiento, este script recoger la versión de el binario Del mismo modo, en el modo de depuración, se recuperará el binario de depuración. Este enfoque no requiere preprocesamiento: el script toma decisiones relacionadas con la configuración en tiempo de compilación.

+1

Eso es genial para encontrar la ruta, pero ¿qué sucede si quiero * condicionalmente * incluir algunos archivos y no otros? (Por lo tanto, la pregunta). Por ejemplo, con una compilación de depuración, es posible que desee incluir los archivos .pdb y no incluirlos con la compilación de lanzamiento (porque a veces los archivos son como 20+ MB cada uno). – BrainSlugs83

9

Al poner las otras dos respuestas y research de Luca, se me ocurrió esta solución, que parece funcionar (tenga en cuenta que la comparación de cadenas parece ser sensible a mayúsculas y la falta de citas parece correcta, lo he probado esto con WiX 3.7):

<?if $(var.Configuration) = Debug ?> 
    <!-- DEBUG ONLY --> 

    [ ... insert debug only XML here ... ] 

    <!-- END DEBUG ONLY --> 
<?else?> 
    <!-- RELEASE ONLY --> 

    [ ... insert release only XML here ... ] 

    <!-- END RELEASE ONLY --> 
<?endif?> 
+2

'' debe ser '' – Bishoy

+0

@ BrainSlugs83 Obtengo "Preprocesador mal formado variable '$ (Configuración)'. Las variables deben tener un prefijo (como 'var.', 'Env.' O 'sys. ') y un nombre de al menos 1 carácter de longitud. Si se desea la cadena literal' $ (Configuración) ', use' $$ (Configuración) '. ¿Alguna idea? – user95227

+0

@ user95227 eche un vistazo más de cerca, debería ser '$ (var.Configuration) 'not' $ (Configuración) '. – BrainSlugs83

Cuestiones relacionadas