2010-01-14 6 views
38

sto iniziando a utilizzare WiX per fare automatizzato costruisce per creare MSI dei miei C# e sto sperimentando l'errore "variabile preprocessore non definita '$ (var.MyProject.TargetDir)'"WiX preprocessore indefinito variabile

Sto usando l'ultimo WiX v3.0.5419. Dentro il mio file WXS Sto cercando di utilizzare le variabili pre-processori che sono elencati su questo 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> 

ho aggiunto il riferimento per MyProject al .wixproj e se aprirlo in Blocco note posso vedere il riferimento.

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

Questo è il mio script di build nant che utilizzo per creare l'msi. Forse perché il .wixproj sa del riferimento al progetto che non è usato nella compilazione?

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

Qualcuno può illuminarmi su questo per favore?

risposta

40

Come già notato, il tuo script di build nant non utilizza affatto il file wixproj.

si stia mescolando due modi diversi per costruire una configurazione Wix qui:

  1. È possibile utilizzare gli strumenti della riga di comando e candle.exelight.exe direttamente. Questo ignora il file .wixproj. Questo è ciò che stai facendo nel tuo script di build nant. Per passare valori per variabili del preprocessore come $(var.MyProject.TargetDir), utilizzare opzioni come -dMyProject.TargetDir=c:\foo.

  2. È possibile creare un file .wixproj con votive (il componente aggiuntivo di Visual Studio per wix). Come tutti i file di progetto di Visual Studio, un file wixproj è in realtà un file di msbuild che può essere compilato con msbuild.exe. Variabili come $(var.MyProject.TargetDir) vengono automaticamente impostate dalle attività di msbuild per la creazione di configurazioni wix se esiste il riferimento al progetto corretto.

vi consiglio di costruire il file wixproj con il <msbuild>nant task. Questo assicura che la tua build di nant faccia la stessa cosa di quando costruisci l'installazione manualmente da Visual Studio.

+0

Grazie mille. Ho appena scoperto che wixproj è un file msbuild e in realtà lo stavo già costruendo correttamente attraverso la costruzione della mia soluzione! – David

+1

Proprio come un rapido head-up - Il modo corretto per specificare l'opzione sarebbe -dMyProject.TargetDir. La principale var. è errato http://geekswithblogs.net/Howard/archive/2009/01/20/wix-variables.aspx –

+0

@Sean: grazie per la correzione. Fisso. –