先看看gacutil -l的结果:

Microsoft (R) .NET Global Assembly Cache Utility.  Version 2.0.40607.16
Copyright 咖啡 Microsoft Corporation. All rights reserved.

The Global Assembly Cache contains the following assemblies:
  CustomMarshalers, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=x86
  ISymWrapper, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=x86
  Microsoft.VisualC, Version=8.0.1200.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=x86
  mscorlib, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, ProcessorArchitecture=x86
  System.Data, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=x86
  System.Data.OracleClient, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=x86
  System.EnterpriseServices, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=x86
  System.Transactions, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=x86
  Accessibility, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL
  apphost, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL
  AspNetMMCExt, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL
  cscompmgd, Version=8.0.1200.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL
  EnvDTE80, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL
  IEExecRemote, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL
  IEHost, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL
  IIEHost, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL
  Microsoft.Build.Engine, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL
  Microsoft.Build.Framework, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL
  Microsoft.Build.Tasks, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL

< The rest is omitted>

Accessibility, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a

  ADODB, Version=7.0.3300.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a

  ConMan, Version=7.0.5000.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a

  ConManDataStore, Version=7.0.5000.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a

  ConManServer, Version=7.0.5000.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a

 

< The rest is omitted>

 

你可以看到,GAC里的Assemblies的名字,除了name, version, culture, publicKeyToken, 又加了一个processorArchitecture. gacutil的结果里,有的显示processorArchitecture=x86 有的显示processorArchitecture=MSIL,有的没有processorArchitecture

 

加入processorArchitecture是为了支持64位。绝大多数Assemblies都是processorArchitecture neutral的。同一个程序既可以在32位上运行,也能在64位上运行。这些assemblies包括所有的C#,VB.NET,和一部分Managed C++ assemblies。它们的processorArchitectureMSIL(之所以叫MSIL而不是neutral,是因为neutral有别的意思)。而绝大多数的Managed C++ assemblies,因为它们同时包括Managed unmanaged的代码,它们必须编译两遍。一次32位的,一次64位的。在64位的OS里,如果32位的assembly64位的assembly要共存的话,必须要有什么区分它们,这就是processorArchitecture。(C\VB.Net assemblies 如果用了P/Invoke的话也有可能需要编译成processorArchitecture specific assembly)。

 

beta1processorArchitecture只在Fusion里存在。在System.Reflection.AssemblyName里暂时还不存在。在beta2里应该能看到System.Reflection.AssemblyName 加入processorArchitecture

 

1.11.0编译的assemblies,没有processorArchitecture。在64位的OS里它们只能以32位的方式运行。

 

微软的编译器都提供了选项编译成64位或者是32位的assembly 比如C#,

 

H:\WINDOWS\Microsoft.NET\Framework\v2.0.40607>csc /?

Microsoft (R) Visual C# .NET Compiler version 8.00.40607.16

for Microsoft (R) Windows (R) .NET Framework version 2.0.40607

Copyright 咖啡 Microsoft Corporation 2001-2003. All rights reserved.

 

                      Visual C# .NET Compiler Options

 

                        - OUTPUT FILES -

/out:<file>                   Output file name (default: base name of file with

                              main class or first file)

/target:exe                   Build a console executable (default) (Short form:

                              /t:exe)

/target:winexe                Build a Windows executable (Short form: /t:winexe)

/target:library               Build a library (Short form: /t:library)

/target:module                Build a module that can be added to another

                              assembly (Short form: /t:module)

/delaysign[+|-]               Delay-sign the assembly using only the public

                              portion of the strong name key

/doc:<file>                   XML Documentation file to generate

/keyfile:<file>               Specifies a strong name key file

/keycontainer:<string>        Specifies a strong name key container

/platform:<string>            Limit which platforms this code can run on: x86,

                              Itanium, x64, or anycpu. The default is anycpu.

 

<The rest is omitted>