繁体   English   中英

何时在Visual Studio中定位x64

[英]When to target x64 in Visual Studio

我最近开始了一份新工作,我注意到每个人都在谈论的第一件事就是将所有我们的.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位运行?

是的,如果您正在调用一个本身为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。

如果您通过COM或P / Invoke使用没有32位版本的本机代码,则应指定x64。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM