何时在Visual Studio中定位x64

ear*_*ing 7 .net 64-bit build visual-studio-2010

我最近开始了一份新工作,我注意到每个人都在谈论的第一件事就是将所有我们的.NET应用程序"更新" 到x64.我最初认为这很奇怪,因为我们都知道.NET编译为平台不可知IL并且特定CLR运行代码.

再往前看,我发现这篇有用的文章这篇SO帖子有助于解释事情.

所以现在我明白IL没有改变,只有元数据基本上说是在WOW64上运行或者不在x64系统上运行(简而言之).

因此,如果我在x64系统上,我可以指定"任何CPU"本地运行,但不支持32位dll; 我可以指定"x86",它将支持32位dll(因为它们都将在WOW64下运行); 但我什么时候会指定"x64"?在x64系统上的"Any CPU"方案中似乎支持64位dll.如果我想阻止某人在32位系统上运行我的应用程序或者在尝试加载32位dll时确保失败,这是不是?

在我看来,如果你的项目中有一些第三方dll ,你只需要将它设置为"Any CPU"以外的其他东西.对于其他不与其他dll打交道的项目,最好将其作为"任何CPU"吗?

如果我碰巧将我的目标设置为"x86",因为我有一个32位的第三方dll,如果在WOW64下的64位系统上,我的应用程序是否真的被认为是在64位运行?

The*_*ser 8

是的,如果您正在调用一个本身为64位的DLL(因为它是本机的,或者是一个本身调用64位本机DLL的托管DLL等),您将指定该项目应编译为x64.

同样,如果您正在处理32位第三方DLL,则指定它应该是x86; 如果在64位版本的Windows上运行,它将不被视为64位应用程序.

如果你只是处理纯托管代码,那么我会把事情留作"任何".我通常也将DLL保留为"any",即使可执行文件指定为x86或x64.

即使你正在处理本地dll,如果你使用PInvoke,你仍然可以将其保留为"any"; 你可以有两个版本的包装它的类,一个用于x86,一个用于x64,并通过检查IntPtr.Size属性选择在运行时使用哪一个.

当然,如果您的应用程序需要超过4 GB的RAM并且您希望强制它必须在64位操作系统上运行,那么您还需要定位x64.