2012-02-09 19 views

risposta

7

This article contiene una breve panoramica di ciascuna opzione.

Ecco una piccola citazione:

L'impostazione predefinita, qualsiasi CPU, significa che l'assemblea verrà eseguito nativamente sulla CPU è attualmente in esecuzione su. Significa che eseguirà come 64-bit su una macchina a 64-bit e 32-bit su una macchina a 32-bit. Se l'assembly viene chiamato da un'applicazione a 64 bit, verrà eseguito come un assembly a 64 bit e così via.

Se il progetto è impostato su x86, significa che il progetto è destinato a eseguito solo come processo a 32 bit. Una procedura a 64 bit non sarà in grado di chiamare in un assieme di assiemi come X86. I motivi per impostare il progetto come x86 includono dipendenze su DLL native che sono disponibili solo in a 32 bit o che effettuano chiamate native assumendo 32 bit. Le applicazioni e gli assembly contrassegnati per x86 possono ancora essere eseguiti su Windows a 64 bit. Comunque corrono sotto WOW64. Visual Studio stesso viene eseguito con questa modalità di emulazione poiché è un'applicazione a 32 bit.

L'impostazione del progetto su x64 specifica che l'assembly deve eseguire in Windows a 64 bit. Il tentativo di eseguire l'assembly su 32-bit Windows o chiamare l'assembly da un processo a 32 bit comporterà un errore di runtime .

+0

Come determinare se le DLL sono disponibili solo a 32 bit? Inoltre, come si può sapere se il programma sta effettuando chiamate native assumendo 32 bit? –

+0

@DanW, suggerisco di pubblicare una domanda. Fare una domanda del genere nei commenti non ti porterà molto lontano. –

+0

Semplicemente più comodo averlo qui se anche altri si imbattono in questo problema. Ad ogni modo, penso che [questo] (http://stackoverflow.com/a/2418287/848344) farà il trucco. –

4

generale, si dovrebbe usare AnyCpu tutto il tempo.

Se si dispone di motivi specifici per prevedere problemi di compatibilità, è necessario scegliere x86 o x64 come appropriato.

Come indicato nei commenti, la dll costruita su architetture specifiche può richiedere di costruire l'assemblaggio in un certo modo. Questo sarà qualcosa che vorrete fare quando voi avete bisogno di, non altrimenti.

+0

quando utilizzo l'arresto anomalo dell'applicazione AnyCpu per qualche motivo. l'opzione x86 funziona ... probabilmente a causa della dll usata .. – javapowered

+1

Sì, alcuni driver 'OleDb' e' ODBC', per esempio, funzionano solo in modalità x86. –

+0

@javapowered Sì se la tua DLL è specificatamente x86 o x64 usa il corrispondente. Ad esempio, stavo usando una DLL Oracle Access DB che era x86 e sono obbligato a compilare in x86. –

2

No ... la macchina su cui scrivi il tuo codice su/compila/crea il tuo software (EXE, DLL ...) non ha nulla a che fare con la domanda su quale target (x86/x64/Qualsiasi).

Se si desidera che il risultato della generazione venga eseguito ovunque, si utilizza x86 o AnyCPU. Se vuoi che il risultato sia eseguito su x64, allora usi x64.

Ci sono alcuni casi in cui è necessario utilizzare x86 o x64 - cioè quando si utilizza un componente (di terze parti?)/Libreria/DLL/ActiveX ecc. Nel progetto che è solo 32 bit (quindi x86) o solo 64 bit solo (quindi x64).

1

AnyCPU è quello che generalmente consiglio. È possibile vedere questo problema discusso in profondità a this SO post.

L'unica preoccupazione è che non è possibile tornare indietro: non è possibile utilizzare un assieme x64 da un'applicazione x86. AnyCPU allevia questa potenziale trappola.

Problemi correlati