簡體   English   中英

VS2012在x64 OS中使用“任何CPU”編譯為x86

[英]VS2012 compiles to x86 with “Any CPU” in a x64 OS

我有一個C#項目和一個C DLL的解決方案。 該解決方案設置為“混合平台”,C#項目設置為“任何CPU”。

當DLL設置為針對x64編譯時,出現崩潰。 但是,當DLL設置為針對x86編譯時,一切正常。

操作系統是Windows7 x64。

無論我嘗試哪種,Environment.Is64BitProcess都為false。

我的理解是,由於操作系統為x64,默認情況下,“任何CPU”都將編譯為x64。 顯然,我錯了。

感謝大伙們。

我的理解是,默認情況下,“任何CPU”都會編譯為x64

不,它將編譯為“任何CPU”。 它的運行方式取決於執行它的機器 因此,如果您在64位CPU上運行它,則可以,它將以64位運行。 但是,從崩潰中聽起來,您的C dll是32位的,或者您正在使用32位的API調用。 在這種情況下,您需要將其編譯為32位。 請注意,在VS2013中,“任何CPU”也有一個“首選32位”選項,除非32位根本不可用,否則它將以32位運行。 大多數人都希望關閉此功能 ,P

還要注意,如果這是一個 (來自dll標簽),則還取決於該進程是32位還是64位。

首先,我們現在應該是什么平台目標

anycpu (默認)可編譯您的程序集以在任何平台上運行。 您的應用程序將盡可能以64位進程的形式運行,只有該模式可用時,應用程序才會回退至32位。

anycpu32bitpreferred編譯您的程序集以在任何平台上運行。 您的應用程序在支持64位和32位應用程序的系統上以32位模式運行。 您只能為面向.NET Framework 4.5的項目指定此選項。

ARM將您的程序集編譯為在具有高級RISC計算機(ARM)處理器的計算機上運行。

x64會在支持AMD64或EM64T指令集的計算機上編譯要由64位公共語言運行時運行的程序集。

x86編譯您的程序集,使其由32位,兼容x86的公共語言運行時運行。 Itanium可以在具有Itanium處理器的計算機上編譯要由64位公共語言運行時運行的程序集。

所以anyCpu意味着運行32位和64位取決於您的cpu。我認為您的dll是32位的,因此您可以使用x86anycpu

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM