2010-08-17 7 views
6

Ho uno script di build che ha bisogno di codificare un percorso verso un eseguibile. Il percorso è:Trova il "bit" del sistema operativo corrente in MSBuild

  • C: \ Programmi \ Microsoft Visual Studio 9.0 \ SmartDevices \ SDK \ SDKTools \ Cabwiz.exe

Questo ha funzionato benissimo, ma ora sono in esecuzione su un po '64 OS (ma il mio collega e il server di compilazione sono ancora a 32 bit).

Ho bisogno il percorso per essere questo per me:

  • C: \ Program Files (x86) \ Microsoft Visual Studio 9.0 \ SmartDevices \ SDK \ SDKTools \ Cabwiz.exe

Ma usa il percorso normale per gli altri.

Ecco come impostare il tutto:

<PropertyGroup> 
    <CabWiz>"C:\Program Files\Microsoft Visual Studio 9.0\SmartDevices\SDK\SDKTools\cabwiz.exe"</CabWiz> 
</PropertyGroup> 

C'è una condizione posso mettere su quel modo che io possa impostare se il sistema operativo (non la configurazione di generazione corrente) è a 64 bit?

risposta

7

C'è una chiave di registro che ti dirà il bit-edness del sistema operativo attuale. Qui ci sono le proprietà che uso nel mio file MSBuild:

<PropertyGroup> 
     <MachineProcessorArchitecture>$(registry:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\[email protected]_ARCHITECTURE)</MachineProcessorArchitecture> 
     <Is32Bit>False</Is32Bit> 
     <Is32Bit Condition="'$(MachineProcessorArchitecture)' == 'x86'">True</Is32Bit> 
     <Is64Bit>False</Is64Bit> 
     <Is64Bit Condition="'$(MachineProcessorArchitecture)' == 'AMD64'">True</Is64Bit> 
</PropertyGroup> 
3

su un sistema operativo a 64 bit, sono definite le seguenti variabili:

ProgramFiles=C:\Program Files 
ProgramFiles(x86)=C:\Program Files (x86) 

Quindi, solo test per la ProgramFiles(x86) e se è vuota, utilizzare ProgramFiles.

1

Se si esegue sempre la versione a 32 bit di MSBuild, indipendentemente dalla piattaforma, è semplice: basta sostituire "$ (Programmi)" per "C: \ Programmi". Se su un sistema operativo a 32 bit o 64 bit, "$ (ProgramFiles)" dovrebbe espandersi nel percorso della cartella corretto (la posizione di tutti i programmi a 32 bit).

Se si sta eseguendo la versione a 64 bit di MSBuild su piattaforme a 64 bit (il che è improbabile), diventa un po 'più complicato. La variabile di ambiente '% ProgramFiles (x86)%' sembra essere quello che vuoi, ma buona fortuna a gestire quelle parentesi. Probabilmente sarebbe più semplice utilizzare la variabile di ambiente '% PROCESSOR_ARCHITECTURE%' in una condizione.

+0

L'esecuzione della versione a 64 bit di MSBuild non è più improbabile, poiché è l'impostazione predefinita per Team Build 2010. Vedere i commenti qui: https://connect.microsoft.com/VisualStudio/feedback/details/591133/msbuild -64-bit-picks-up-the-wrong-extensions-path – Mark

3

si sta utilizzando il numero di bit per cercare di indovinare la cartella Program Files corretto, ma non c'è alcuna garanzia che è sull'unità C, o anche chiamato "Programma File". Sarebbe meglio usare la proprietà $(MSBuildProgramFiles32) (in MSBuild 4.0).