[英]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位的,因此您可以使用x86
或anycpu
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.