任何 CPU 都允许应用程序或库作为 64 位进程或
32位进程,取决于操作系统的位数
启动。
x86 应用程序将始终作为 32 位应用程序运行,无论位数如何
操作系统。
x64 应用程序只能在 64 位操作系统上运行。这也是
有时称为 AMD64,因为 AMD 创建了这个 64 位指令集。
Itanium 用于 Itanium CPU。
如果您有一个 Any CPU 应用程序并且它加载了一个 x86 库,则该应用程序
在 32 位 Windows 下可以工作,但在 64 位 Windows 下会抛出异常。
当您为您的应用程序或库指定架构时,您就是
告诉框架你的应用程序只能使用它
建筑学。例如,如果您的应用程序执行特定的操作
对于 x86 架构,您要确保它没有加载到 64 位
进程或安腾进程。您可以通过设置目标 CPU 来做到这一点。
如果您执行特定于 x86 架构的操作并编译到任何 CPU
您的应用程序将在 32 位窗口下运行,因为 .NET 运行时将在
32位模式。如果您的应用程序在 64 位操作系统或安腾操作系统下运行
运行时将查看您的应用程序是否看到 AnyCPU 并尝试使用本机 64 位
代码。您的应用程序将失败。如果您指定 x86,则运行时将
以 32 位模式启动,您的应用程序将正常运行。
该设置告诉框架在哪些架构下可以安全运行。
实际发生的是设置了应用程序的一些元数据
不同。您可以使用 dumpbin.exe 查看此信息这是一个示例
AnyCPU 库的输出
bin\Debug>dumpbin /CLRHEADER bitnesstest.dll
Microsoft (R) COFF/PE 翻车机版本 10.00.30319.01
版权所有 (C) 微软公司。版权所有。
文件 bitnesstest.dll 的转储
文件类型:DLL
clr 标题:
48 立方
2.05 运行时版本
2058 [ 5D0] 元数据目录的 RVA [大小]
1 个标志
仅限伊利诺伊
0 入口点令牌
0 [ 0] 资源目录的 RVA [大小]
StrongNameSignature 目录的 0 [ 0] RVA [大小]
CodeManagerTable 目录的 0 [ 0] RVA [大小]
VTableFixups 目录的 0 [ 0] RVA [大小]
ExportAddressTableJumps 目录的 0 [ 0] RVA [大小]
0 [ 0] ManagedNativeHeader 目录的 RVA [大小]
和一个 x86 库
bin\Debug>dumpbin /CLRHEADER bitnesstest.dll
Microsoft (R) COFF/PE 翻车机版本 10.00.30319.01
版权所有 (C) 微软公司。版权所有。
文件 bitnesstest.dll 的转储
文件类型:DLL
clr 标题:
48 立方
2.05 运行时版本
2058 [ 5D0] 元数据目录的 RVA [大小]
3 个标志
仅限伊利诺伊州
需要 32 位
0 入口点令牌
0 [ 0] 资源目录的 RVA [大小]
StrongNameSignature 目录的 0 [ 0] RVA [大小]
CodeManagerTable 目录的 0 [ 0] RVA [大小]
VTableFixups 目录的 0 [ 0] RVA [大小]
ExportAddressTableJumps 目录的 0 [ 0] RVA [大小]
0 [ 0] ManagedNativeHeader 目录的 RVA [大小]
要显示 x64 和 IA64 - Itanium 之间的区别,您可以将 dumpbin 与
/HEADERS 开关。 /CLRHEADERS 与在
厘米。