2013-03-26 9 views
7

La mia azienda ci ha recentemente costretto a utilizzare Wix Toolset (v.4.0.12), perché abbiamo aggiornato a Visual Studio 2012 che purtroppo non contiene più progetti di installazione.WIX Toolset integrato nei problemi per principianti VS 2012

I miei problemi sono i seguenti. Ho una grande soluzione con molti progetti che risultano tutti in un file exe e diverse DLL.

Quindi creo un progetto di installazione Wix nella soluzione e aggiungo un riferimento al progetto che produce il file exe. Nelle proprietà di tale riferimento di progetto ho impostato Harvest: true e Project Output Groups: Binaries.

Mi aspetto una build del mio progetto WiX per raccogliere le dipendenze dal progetto di riferimento, in modo da non dover aggiungere manualmente i riferimenti, in quanto ciò mi darebbe più manutenzione.

Inoltre, se eseguo heat.exe nel file di progetto di riferimento, ottengo solo l'output exe del file e non le DLL da cui dipende il progetto.

Suppongo che quanto sopra sia abbastanza standard e che gli strumenti di wix dovrebbero essere in grado di raccogliere quelle informazioni per me. E mi chiedo davvero perché dopo una lunga ricerca in rete, non riesca a trovare nessuno con problemi simili.

Se qualcuno sa perché quanto sopra, prova a inviarmi un tutorial di base su come fare cose con WiX. Mi sembra impossibile trovarne uno appropriato.

risposta

8

WiX v3.6 e versioni successive supportano VS2012. WiX v4.0 è appena iniziato e non è raccomandato per l'uso in questo momento. Ci sono un sacco di modifiche alla versione v4.0, quindi per ora rimani con la linea v3.x.

La funzione di raccolta automatica in Votive non è completamente funzionale. Questo è il motivo per cui è disabilitato per impostazione predefinita. Trovato molti tipi di progetti lo stavano rompendo. Come hai trovato, la raccolta non passa attraverso più riferimenti di progetto. Tutte cose che richiedono più lavoro prima che funzionino correttamente.

Nel frattempo, è possibile elencare gli elementi File negli elementi Component.

+0

Esiste un'attività MSBuild per l'output di Raccolta? Penso, ho visto da qualche parte in rete ma non riesco a trovarlo ora. –

2

Non sai come stai usando la v4.0.12 quando non è ancora uscita! :) Wix v3.8 è l'ultima versione: http://wixtoolset.org/releases.

Ci sono molte guide nello official documentation e si possono trovare anche molte informazioni nello tutorial.

Tuttavia per il vostro caso specifico sarà necessario includere manualmente le uscite di ogni progetto e le loro dipendenze nel programma di installazione come la raccolta automatica non è ancora supportato:

<Component> 
    <File Id="ProjectA.Output" 
      Name="$(var.ProjectA.TargetFileName)" 
      Source="$(var.ProjectA.TargetPath)" 
      KeyPath="yes" /> 
</Component> 

<Component> 
    <File Id="ProjectA.NlogDependancy" 
      Name="NLog.dll" 
      Source="$(var.ProjectA.TargetDir)\Nlog.dll" 
      KeyPath="yes" /> 
</Component> 

<Component> 
    <File Id="ProjectB.Output" 
      Name="$(var.ProjectB.TargetFileName)" 
      Source="$(var.ProjectB.TargetPath)" 
      KeyPath="yes" /> 
</Component> 

<Component> 
    <File Id="ProjectB.AutofacDependancy" 
      Name="Autofac.dll" 
      Source="$(var.ProjectB.TargetDir)\Autofac.dll" 
      KeyPath="yes" /> 
</Component> 

Questo non è poi così difficile da fai e a meno che tu non abbia diverse centinaia di binari non ti porteranno troppo tempo.

+0

Ciao. Grazie per la tua risposta. Divertente la versione 4.0.12 non è elencata, ma l'ho presa da qui http://wixtoolset.org/releases/v4.0.12.0. Probabilmente è ancora beta, ma presumibilmente è l'unico che si integra in Visual Studio 2012. Ho letto molto sul mio problema e ho pensato che heat.exe esegua le dipendenze di un progetto, ma sfortunatamente non è quello che succede. Vedrò se dovrei scegliere un altro programma di installazione. Grazie ancora –

+0

WiX 3.7 si integra anche con VS2012. Ma questa risposta è ancora richiesta in questo momento. –

1

Ho avuto un problema simile quando ho provato a creare un'installazione .msi della mia soluzione.

Per superare questo problema e per renderlo duraturo nel tempo anche quando inserisco nuove DLL e altre dipendenze nel mio progetto e per renderlo automatico ho fatto quanto segue.

Nel mio prodotto.WXS ho questo "Directory"

<!--Here We Install Our Main App--> 
<Directory Id="TARGETDIR" Name="SourceDir"> 
    <Directory Id="ProgramFilesFolder"> 
    <Directory Id="INSTALLFOLDER" Name="MyAppDir"/> 
    </Directory> 
... 
</Directory> 

e nei miei Wix Progetto-> Proprietà -> Eventi di compilazione -> Pre costruire riga di comando evento, ho aggiunto il seguente comando:

"%wix%\bin\heat" dir "$(SolutionDir)MainProject\bin\Debug" -dr INSTALLFOLDER -scom -frag -srd -sreg -gg -cg Components -var var.MainProject.TargetDir -o $(SolutionDir)MainProject\Includedheat.wxs 

Una volta che costruisco la mia progetto wix creerà un file Includedheat.wxs nella mia directory MainProject che elenca tutti i file dalla mia directory MainProject \ bin \ Debug.

passo successivo - aggiungere i Includedheat.wxs nel progetto Wix, che nella mia sezione caratteristica aggiunsi:

<!--Add Component--> 
<Feature Id="MainApplication" Title="Main Application" Level="1"> 
... 
<ComponentGroupRef Id="Components" /> 
</Feature> 

ora una volta ricostruisco e installare il msi tutti i contenuti che risiedeva nel mio mainproject La directory \ bin \ Debug verrà inclusa anche nella directory MyAppDir nella posizione di destinazione.

Per qualche informazione in più: Ho seguito questo guida:

Create a working Wix project.

Easy way heat.exe.

raccomandarlo anche da leggere per detrming quello flags da utilizzare nel comando.