2009-11-06 15 views
19

Quiero incluir alguna parte dinámica en el nombre del archivo msi que producen mis proyectos wix. Esta parte dinámica debe ser controlado por las variables que forman parte de mi proyecto de Wix y se declaran como esto:WIX: Cómo establecer el nombre del archivo de salida msi dinámicamente

<?define ProductVersion="7.1.0.1" ?> 

¿Alguien sabe acerca de una forma de enviar ese valor de esa variable Wix al enlazador para utilizarlo como parte del nombre de archivo de salida?

Por cierto: estoy usando Wix3

Respuesta

2

ya que es sólo un nombre de archivo, por qué no tienen una acción posterior a la generación que cambia el nombre del archivo en la escritura de la estructura (suponiendo MSBuild)?

+0

Ok, eso funcionaría probablemente. Voy a probar eso. Pero estaba buscando una forma más directa, ¿o crees que esto no es compatible con wix? He leído algo sobre las variables del vinculador aquí: http://n2.nabble.com/Types-of-variables-question-td3825142.html ! (Wix.Name) obtiene lo que se llama WixVariables (se puede definir en el código fuente con el elemento WixVariable, o pasado en la línea de comando de luz y/o iluminado de manera similar a las variables de preprocesador que se pasan a la vela). Pero eso no parece funcionar. – Jan

+1

Lo mencioné de esta manera ya que es la forma más rápida y sencilla de manejarlo. Al igual que muchos otros problemas de desarrollo, siempre recuerde KISS. –

+5

Renombrar el MSI es una mala idea. No lo hagas! http://blogs.msdn.com/b/robmen/archive/2004/12/08/278746.aspx – l33t

15

El nombre del archivo msi no está determinado por sus archivos wix, sino por el interruptor light.exe -out. Se puede utilizar el mismo valor para -out y dentro de sus archivos wix si hace lo siguiente en su script de creación, asumiendo que es un script por lotes:

  • establecer una variable de entorno con set productversion=1.2.3
  • Pass -out foo%productversion%.msi a la light.exe enlazador
  • utilizan la misma variable de entorno en sus archivos wix como $(env.productversion)
-5
Product Id="GUID" Name="whatevername $(var.ProductVersion)" 
+0

Esto controla cómo se muestra el producto en Agregar o quitar programas, no el nombre de archivo de la MSI. – Rozwel

0

¿Las variables deben definirse en WiX? Estoy construyendo mis archivos binarios de configuración de MSBuild, y simplemente configuré el nombre del archivo de salida en MyProject_$(Platform) - Espero que cualquier sustitución de la variable MSBuild funcione igual de bien.

35

Puede actualizar el OutputName de su .wixproj y usar una variable MSBuild para pasar el número de versión o cualquier otra variable que desee.

Mi escritura de la estructura se parece a esto:

set PRODUCTVERSION=7.1.0.1 
MSBuild.exe /p:Configuration=Debug /p:ProductVersion=%PRODUCTVERSION% Installer.wixproj 

Y mi proyecto WiX se ve así:

<?xml version="1.0" encoding="utf-8"?> 
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <PropertyGroup> 
    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> 
    <Platform Condition=" '$(Platform)' == '' ">x86</Platform> 
    <ProductVersion>1.0.0.0</ProductVersion> 
    <ProjectGuid>{b7415c44-8d59-4ac2-b698-03e399a305e3}</ProjectGuid> 
    <SchemaVersion>2.0</SchemaVersion> 
    <OutputName>Installer.$(ProductVersion)</OutputName> 
    ... 
    </PropertyGroup> 
    <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' "> 
    <OutputPath>bin\$(Configuration)\</OutputPath> 
    <IntermediateOutputPath>obj\$(Configuration)\</IntermediateOutputPath> 
    <DefineConstants>Debug</DefineConstants> 
    <WixVariables>ProductVersion=$(ProductVersion)</WixVariables> 
    </PropertyGroup> 
    ... 
</Project> 

La salida sería:

Installer.7.1.0.1.msi 
+2

Creo que esta es la mejor respuesta de todas por una milla ... – ostati

+1

¡Exactamente lo que estaba buscando, gracias! Desafortunadamente, parece que VisualStudio no le gusta algo como ' $ (ProductName)' de fábrica. Para mi caso, fue suficiente para proporcionar un valor predeterminado (utilizado principalmente para compilaciones a través de VisualStudio por un humano: ' ApplicationSetup' y pasar un valor real como se describe @Charlie (cuando lo ejecuta el servidor de compilación a través de msbuild). – CodeFox

+1

Esta debería ser la respuesta aceptada ... era precisamente lo que necesitaba (más el apéndice de @CodeFox). – Jon

0

Si tiene varias configuración que dentro del archivo .wixprj puede hacer lo siguiente

<OutputName Condition="'$(Configuration)' == 'User'">User.Setup</OutputName> 
<OutputName Condition="'$(Configuration)' == 'Designer'">Designerr.Setup</OutputName> 
1

me encontré con un par de grandes postes de referencia para hacer precisamente esta operación:

http://blog.tentaclesoftware.com/archive/2009/05/03/38.aspx

y un seguimiento con un mejor método de crear el archivo de salida utilizando un evento de pre-construcción:

http://blog.tentaclesoftware.com/archive/2010/08/05/99.aspx

sé que los enlaces son viejos, pero el método es el sonido.

Éstos son los pasos básicos:

  • poner la versión que desea utilizar en un archivo que se pueda acceder desde su proyecto. Uso el ejecutable principal de mi instalación porque también me enlace a esa versión en mi wxs. En mi caso, dado que estoy compilando con C# y uso SVN, tengo una versión de plantilla de mi assembly.cs, assembly.cs.txt, que ejecuto subwcrev como un evento de preconstrucción para crear el assembly.cs que obtiene compilado en mi ejecutable (de hecho lo hago en un proyecto separado en mi solución). Subwcrev inserta alguna información de fecha y revisión que utilizo para crear una versión en el formato "major.minor.version.0" donde uso "year.month.revision.0" para mi versión.

  • Ahora, normalmente solo configuro AssemblyFileVersion con este método, pero para poder usar mi número de versión en el evento de compilación wixproj al que se hace referencia en la publicación anterior, también tengo que configurar AssemblyVersion ya que es lo que se puede acceder con GetAssemblyIdentity. Este método sería cuestionable si realmente estuviera usando un ensamblaje al que alguien más está vinculado, pero para mí está bien ya que está en mi ejecutable de aplicación final.

  • Siga los pasos descritos en la segunda publicación (la primera publicación trata sobre el método de enlace para la versión en wxs y sobre cómo descargar y editar el wixproj - contexto valioso para la segunda publicación).

¡Trabaja como un encanto!

Cuestiones relacionadas