Visual Studio“Any CPU”目标是什么意思?

我有一些与Visual Studio 2008中的.NET平台构建选项有关的混淆。

什么是“任何CPU”编译目标,它会生成什么样的文件? 我检查了这个“任何CPU”构建的输出可执行文件,并发现它们是x86可执行文件(谁不会看到它!)。 那么,将可执行文件定位到x86与“任何CPU”之间有什么区别?

我注意到的另一件事是托管的C ++项目没有这个平台作为选项。 这是为什么? 这是否意味着我怀疑“任何CPU”可执行文件是纯32位的可执行文件是正确的?


一个AnyCPU程序集将在加载到64位进程时将64位代码加载到32位进程中,并将其加载到32位进程中。

通过限制CPU,你会说:组件有些东西(可能是非管理的东西)需要32位或64位。


我认为大部分重要的东西都已经说过了,但我只是认为我会补充一件事情
如果您编译为任何CPU并在x64平台上运行,那么您将无法加载32位dll,因为您的应用程序未在WOW64中启动,但这些dll需要在那里运行。
如果您编译为x86,则x64系统将在WOW64中运行您的应用程序,并且您将能够加载32位dll。
所以我认为你应该选择“任何CPU”,如果你的依赖可以在任何环境中运行,但是如果你有32位依赖,选择x86。 微软的这篇文章解释了这一点:

/ CLRIMAGETYPE(指定CLR图像的类型)


这里有一个快速概述,解释了不同的构建目标。

根据我自己的经验,如果您打算构建一个可以在x86和x64应用程序上运行的项目,并且您没有任何特定的x64优化,我会更改构建以专门说“x86”。

造成这种情况的原因有时候你可能会碰到一些碰撞的DLL或者一些在x64环境中崩溃的代码。 通过专门指定x86,x64操作系统将把应用视为纯粹的x86应用,并确保一切顺利运行。

链接地址: http://www.djcxy.com/p/13055.html

上一篇: What does the Visual Studio "Any CPU" target mean?

下一篇: How to convert string to double with proper cultureinfo