2010-01-14 19 views
38

estoy empezando a usar WiX Para ello construye automatizado para crear de MSI de mis proyectos # C y estoy experimentando el error "variable de preprocesador Indefinido '$ (var.MyProject.TargetDir)'"WiX preprocesador indefinido variables

Estoy utilizando la última versión de WiX v3.0.5419. Dentro de mi archivo wxs Estoy tratando de utilizar las variables pre-procesador que aparecen en esta página web (http://blogs.msdn.com/jrock/archive/2008/01/29/complete-list-of-candle-preprocessor-variables.aspx)

<Component Id="MyId" Guid="MyGuid"> 
    <File Id="MyId" Name="MyName" KeyPath="yes" 
     Source="$(var.MyProject.TargetDir)\MyName.dll" /> 
</Component> 

he añadido la referencia para MiProyecto a la .wixproj y si lo abro en el Bloc de notas que puedo ver la referencia

<ItemGroup> 
    <ProjectReference Include="..\MyProject.csproj"> 
    <Name>MyProject</Name> 
    <Project>{guid}</Project> 
    <Private>True</Private> 
    </ProjectReference> 
</ItemGroup> 

Este es mi script de construcción nant que utilizo para crear el msi. Tal vez es porque .wixproj sabe acerca de la referencia del proyecto que no se utiliza en la compilación?

<exec basedir="${tools.wix}" managed="true" program="candle.exe"> 
    <arg line='-out "${tools.wix.objfile}"' /> 
    <arg value="../MySetup.wxs" /> 
</exec> 

¿Alguien puede aclararme sobre esto por favor?

Respuesta

40

Como ya ha comentado, su secuencia de comandos nant build no está utilizando el archivo wixproj.

Usted está mezclando dos maneras diferentes de construir una instalación Wix aquí:

  1. Usted puede utilizar las herramientas y candle.exelight.exe línea de comandos directamente. Esto ignora el archivo .wixproj. Esto es lo que estás haciendo en tu script de construcción nant. Para pasar valores para variables de preprocesador como $(var.MyProject.TargetDir), use opciones como -dMyProject.TargetDir=c:\foo.

  2. Puede crear un archivo .wixproj con votive (el add-on visual studio para wix). Como todos los archivos de proyectos visuales de estudio, un archivo wixproj es en realidad un archivo msbuild que se puede compilar con msbuild.exe. Variables como $(var.MyProject.TargetDir) son establecidas automáticamente por las tareas de msbuild para construir configuraciones de wix si existe la referencia correcta del proyecto.

recomiendo a construir el archivo wixproj con el <msbuild>nant task. Esto garantiza que su compilación nant haga lo mismo que cuando construye la configuración manualmente desde Visual Studio.

+0

Muchas gracias. ¡Me acabo de enterar de que el archivo wixproj es un archivo de msbuild y, de hecho, ya lo estaba compilando correctamente al crear mi solución! – David

+1

Al igual que un aviso rápido: la forma correcta de especificar la opción sería -dMyProject.TargetDir. La var. Principal es erróneo http://geekswithblogs.net/Howard/archive/2009/01/20/wix-variables.aspx –

+0

@Sean: gracias por la corrección. Fijo. –