簡體   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