2015-04-13 16 views
13

Sono curioso di sapere come .NET definisce un'interfaccia architettonica di processo se compilo il codice sorgente sotto l'impostazione di configurazione "Qualsiasi CPU". Ho sempre pensato che se si esegue quel processo in un computer x64, sarà un processo a 64 bit. Tuttavia, l'esempio seguente mostra una cosa completamente diversa.In che modo .NET definisce un'interfaccia architettonica di processo?

Ho un semplice programma di console con codice come questo:

static void Main(string[] args) 
     { 
      Console.WriteLine("Process Type: {0}", Environment.Is64BitProcess?"64 Bit":"32 Bit"); 

      Console.ReadLine(); 
     } 

e l'impostazione di configurazione è simile a questo:

Configuration Setting

E il mio processore è a 64 bit:

Computer Processor

Infine, il risultato mostra

Enter image description here

La prego di dare alcuni spunti?

risposta

5

Vedi this Microsoft blog post, che dice:

In .NET 4.5 e Visual Studio 11 il formaggio è stato spostato. L'impostazione predefinita per la maggior parte dei progetti .NET è nuovamente AnyCPU, ma ora c'è più di uno che significa AnyCPU. C'è un sottotipo aggiuntivo di AnyCPU, "Qualsiasi CPU preferita a 32 bit", che è il nuovo predefinito (nel complesso, ci sono ora cinque opzioni per lo switch di compilatore/piattaforma C#: x86, Itanium, x64 , anycpu e anycpu32bitpreferred). Quando si utilizza quel sapore di AnyCPU, la semantica sono i seguenti:

  • Se il processo viene eseguito su un sistema Windows a 32 bit, viene eseguito come un processo a 32 bit . IL è compilato per codice macchina x86.
  • Se il processo viene eseguito su un sistema Windows a 64 bit, viene eseguito come processo a 32 bit. IL è compilato per codice macchina x86.
  • Se il processo viene eseguito su un sistema ARM Windows, viene eseguito come processo a 32 bit. IL è compilato in codice macchina ARM.

La disattivazione di "Prefer 32 bit" disabiliterà questo comportamento.

+0

Ma qual è la differenza tra "CPU preferita a 32 bit" e "x86" allora? – GeorgeChond

+1

La differenza tra "Any CPU 32-bit preferred" e "x86" è: Un'applicazione .NET compilata su x86 non funzionerà su un sistema ARM Windows, ma un'applicazione "Any CPU 32-bit preferred" verrà eseguita correttamente. – MikeG

4

Ciò accadrebbe se si seleziona Prefer 32-bit nella scheda Crea in Proprietà progetto.

+0

La tua risposta è corretta, tuttavia posso accettarne solo una come risposta accettata. Mi dispiace per quello –

Problemi correlati