我对Visual Studio 2008中的. net平台构建选项有些困惑。
“Any CPU”编译目标是什么,它生成什么类型的文件?我检查了这个“任意CPU”构建的输出可执行文件,发现它们是x86可执行文件(谁也没想到!)那么,针对可执行文件到x86和针对可执行文件到x86之间有什么区别吗?“任何CPU”?
我注意到的另一件事是,托管c++项目没有这个平台作为一个选项。为什么呢?这是否意味着我对“任何CPU”可执行文件是普通32位的怀疑是正确的?
我对Visual Studio 2008中的. net平台构建选项有些困惑。
“Any CPU”编译目标是什么,它生成什么类型的文件?我检查了这个“任意CPU”构建的输出可执行文件,发现它们是x86可执行文件(谁也没想到!)那么,针对可执行文件到x86和针对可执行文件到x86之间有什么区别吗?“任何CPU”?
我注意到的另一件事是,托管c++项目没有这个平台作为一个选项。为什么呢?这是否意味着我对“任何CPU”可执行文件是普通32位的怀疑是正确的?
当前回答
查看文章Visual Studio . net平台目标解释。
默认设置“Any CPU”意味着程序集将运行 本机位于当前运行的CPU上。也就是说,它会运行 在64位机器上是64位,在32位机器上是32位。如果 程序集从64位应用程序调用时,它将作为 64位汇编等等。
上面的链接已经被报道中断了,所以这里有另一篇文章有类似的解释:AnyCPU在。net 4.5和Visual Studio 11的真正含义
其他回答
我推荐你阅读这篇文章。
当使用AnyCPU时,语义如下:
如果该进程运行在32位Windows系统上,则它作为32位进程运行。CIL被编译为x86机器代码。 如果该进程运行在64位Windows系统上,则它作为32位进程运行。CIL被编译为x86机器代码。 如果该进程运行在ARM Windows系统上,则它作为32位进程运行。CIL被编译成ARM机器代码。
AnyCPU程序集在加载到64位进程时将JIT为64位代码,在加载到32位进程时将JIT为32位代码。
通过限制CPU,您可能会说:程序集正在使用某些东西(可能的东西) 非托管),需要32位或64位。
任何CPU都意味着它可以在任何平台上工作。这是因为托管代码类似于Java。可以把它看作是被编译成字节码,由. net Framework在运行时解释。
c++没有这个选项,因为它被编译为特定于平台的机器代码。
“任意CPU”意味着当程序启动时,. net框架会根据操作系统的比特数判断程序是运行在32位还是64位。
x86和任何CPU之间是有区别的:在x64系统上,为x86编译的可执行文件将作为32位可执行文件运行。
根据您的怀疑,只需转到Visual Studio 2008命令行并运行以下命令。
dumpbin YourProgram.exe /headers
它会告诉你程序的大小,还有很多其他信息。
查看文章Visual Studio . net平台目标解释。
默认设置“Any CPU”意味着程序集将运行 本机位于当前运行的CPU上。也就是说,它会运行 在64位机器上是64位,在32位机器上是32位。如果 程序集从64位应用程序调用时,它将作为 64位汇编等等。
上面的链接已经被报道中断了,所以这里有另一篇文章有类似的解释:AnyCPU在。net 4.5和Visual Studio 11的真正含义