如何确定.NET应用程序是32位还是64位?

Jon*_*len 44 .net

我有一个.NET应用程序,应该被编译为一个32位的应用程序.我怀疑我的构建服务器实际上并没有这样做.

如何确定.NET应用程序是否实际设置为以32位模式运行?

Jac*_*ius 49

如果您正在尝试检查正在运行的应用程序是否以32位或64位模式运行,请打开任务管理器并检查它是否在进程名称旁边有星号(*32).

如果您有一个已编译的DLL并且想要检查它是否已编译为32位或64位模式,请执行以下操作(来自相关问题). 我认为你想要你为AnyCPU编译.

打开Visual Studio命令提示符并键入"corflags [your assembly]".你会得到这样的东西:

c:\Program Files (x86)\Microsoft Visual Studio 9.0\VC>corflags "C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.Data.dll"

Microsoft (R) .NET Framework CorFlags Conversion Tool. Version 3.5.21022.8 Copyright (c) Microsoft Corporation. All rights reserved.

Version : v2.0.50727
CLR Header: 2.5
PE : PE32
CorFlags : 24
ILONLY : 0
32BIT : 0
Signed : 1

你正在专注PE和32BIT.

AnyCpu:

PE:PE32 32BIT:0

86:

PE:PE32 32BIT:1

64位:

PE:PE32 + 32BIT:0

  • 顺便说一下,它在 VS 2017 中称为“VS 开发人员命令提示符”。(名称更改使其很难找到。) (2认同)

Kev*_*vin 20

要在运行时执行此操作...

你可以评估IntPtr.Size.如果IntPtr.Size == 4那么它是32位(4 x 8).如果IntPtr.Size == 8那么它是64位(8 x 8)

  • 它仍然有用; 如果您想在运行时采取任何基于平台的决策. (2认同)

Dan*_*Tao 8

好吧,如果您使用的是.NET 4.0,那就是System.Environment.Is64BitProcess.


x0n*_*x0n 7

最快的方法可能是在64位计算机上运行时,它在任务管理器中的名称后面会有一个星号(*).星号表示它在syswow64中运行,因为它标记为32位.

另一种方法是对它运行corflags.exe,这将显示你想要的答案.这附带.NET SDK.