2014-05-08 7 views
10

Ho una soluzione VS2013 con diversi progetti (un'applicazione C# WPF e librerie di classi). Il "Target di piattaforma" di ogni progetto è impostato su "Qualsiasi CPU". Avevo l'impressione che l'EXE risultante funzionasse come un'applicazione a 64 bit su un PC a 64 bit e un'applicazione a 32 bit su un PC a 32 bit. È corretto? Il mio PC di sviluppo è a 64 bit, ma quando eseguo l'applicazione (sia standalone o tramite debug VS), appare nel task manager come "foo.exe * 32". Cosa sta succedendo qui?Confuso sulla creazione di 32 o 64 bit

Abbiamo uno sviluppatore junior con una macchina a 32 bit. Sarà ancora in grado di aprire la soluzione ed eseguirla in VS?

Inoltre, alcuni dei progetti fanno riferimento a una DLL di terze parti. Il fornitore fornisce sia una versione a 32 e 64 bit - a quale dei progetti si dovrebbe fare riferimento? Se faccio riferimento alla DLL a 32 bit, ciò impedirà l'esecuzione dell'applicazione come un'applicazione a 64 bit? E se faccio riferimento alla versione a 64 bit, ciò causerà problemi allo sviluppatore a 32 bit? E per quanto riguarda gli utenti finali: il mio installatore dovrà verificare la versione del sistema operativo e copiare attraverso la DLL appropriata?

Infine, che dire delle DLL referenziate tramite NuGet? NuGet installa versioni a 32 o 64 bit di DLL? Come posso gestire l'installazione degli utenti finali a 32 o 64 bit?

+0

possibile duplicato del [cosa il Visual Studio "Qualsiasi CPU" target medio?] (http://stackoverflow.com/questions/516730/what-does-the-visual-studio-any-cpu-target-mean) – d3dave

risposta

8

ho intenzione di provare a rispondere ad alcune delle vostre domande dal momento che hai bundle così tanti in una sola ..

We have a junior developer with a 32-bit machine. Will he still be able to open the solution and run it in VS?

Sì, a patto che tutti i progetti sono impostati a costruire per Any CPU e non ci sono dipendenze esterne su assiemi a 64 bit o DLL native.

If I reference the 32-bit DLL will this prevent the application from running as a 64-bit application?

Sì, se una qualsiasi delle assemblee, o componenti COM collegati è stato appositamente costruito contro il CLR 32bit allora richiederà l'intero progetto per l'esecuzione come un processo a 32 bit. Devi sempre fare attenzione al codice nativo da cui dipende il tuo progetto.

And if I reference the 64-bit version, will this cause problems for the 32-bit developer?

Sì, lo sviluppatore a 32 bit non sarà in grado di eseguire il progetto sulla sua macchina, se ci sono dei gruppi di 64 bit.


Come ultimo pensiero vorrei aggiungere che è molto importante se il progetto eseguibile finale è costruito come Any CPU, o per una a 32 bit specifico o piattaforma di destinazione a 64 bit.

Di solito ho trovato che avere l'eseguibile finale costruito come Any CPU può causare problemi di ogni genere in fase di esecuzione (del Bad varietà eccezione Immagine runtime) a meno che tutti i gruppi legati sono mirati anche per Any CPU e non ci sono esterni, nativo, le dipendenze . Quest'ultimo requisito è il più difficile da garantire.

D'altra parte, un eseguibile finale costruito per un 32bit o 64bit piattaforma esplicitamente specificato può tranquillamente incorporare altri gruppi costruiti per Any CPU

+0

In realtà, credo che se si fa riferimento a una DLL a 32 bit e l'applicazione è Qualsiasi CPU si otterrà un'eccezione di runtime quando si esegue su un computer a 64 bit. Questo potrebbe essere cambiato con l'ultimo .NET, ma è così che funzionava. –

+0

Grazie per la risposta. Comincia a sentire che il percorso "Any CPU" è un po 'irto, poiché trovo difficile scoprire quali riferimenti sono 32 e quali 64 (specialmente quelli via NuGet). Ho anche notato che i progetti fanno riferimento a tutti gli assembly di framework .Net sul percorso 'C: \ Programmi (x86) \ Reference Assemblies \ ... Solo curioso perché VS sta guardando qui piuttosto che (per esempio) C: \ Windows \ Microsoft.Net \ Framework \ o \ Framework64? –

+0

@ Timb hai ragione. Quando un eseguibile viene creato come CPU Any viene caricato come processo a 64 bit in fase di runtime e se uno qualsiasi dei codici gestiti gestiti o non gestiti è generato come codice a 32 bit, causerà un'eccezione di runtime di Bad Image. Quello che intendevo dire è che richiederà l'assemblaggio finale per funzionare come un processo a 32 bit. –

1

Abbiamo uno sviluppatore Junior con una macchina a 32 bit. Sarà ancora in grado di aprire la soluzione ed eseguirla in VS?

Sì, può correre.

Se si fa riferimento alla DLL a 32 bit/64 bit, ciò impedirà l'esecuzione dell'applicazione come applicazione a 64 bit/32 bit?

L'edizione manuale dei file .csproj. Hai anche bisogno di directory separate per i diversi file binari, idealmente fratelli l'uno dell'altro e con lo stesso nome della piattaforma che stai prendendo di mira.

consultareConditionally use 32/64 bit reference when building in Visual Studio

che dire gli utenti finali - sarà mio installatore bisogno di controllare la versione del sistema operativo e copiare tutto il DLL appropriata?

Sì, è necessario gestire gli script di processo di generazione per creare versione specifica per un'architettura differente ..

Riferimenti:
What does the Visual Studio "Any CPU" target mean?

Problemi correlati