VS2012使用"任何CPU"编译到x86。在x64操作系统中

时间:2014-04-03 08:15:11

标签: c# visual-studio-2012 dll compilation

我有一个C#项目和一个C DLL的解决方案。解决方案设置为“Mixed Platforms”,C#项目设置为“Any CPU”。

当DLL设置为x64编译时,我遇到了崩溃。但是当DLL设置为x86编译时,一切正常。

操作系统是Windows7 x64。

Environment.Is64BitProcess无论我尝试了什么都会给出错误。

我的理解是“任何CPU”默认编译为x64,因为操作系统是x64。显然,我错了。

谢谢你们。

2 个答案:

答案 0 :(得分:2)

  

我的理解是“任何CPU”默认编译为x64

不,它会编译为“任何CPU”。它的运行取决于正在执行它的机器。因此,如果您在64位CPU上运行,那么是的,它将以64位运行。但是,从崩溃中,听起来你的C dll是32位,或者你正在使用32位API调用。在这种情况下,您需要将其编译为32位。请注意,在VS2013中,“任何CPU”还有一个“首选32位”选项,它将作为32位运行,除非32位不可用。大多数人都想关闭; ; p

另请注意,如果这是(来自dll标记),它还将取决于进程是32位还是64位。< / p>

答案 1 :(得分:2)

首先我们现在应该是Platform target

anycpu(默认)编译您的程序集以在任何平台上运行。您的应用程序尽可能以64位进程运行,只有该模式可用时才会回退到32位。

anycpu32bitpreferred编译您的程序集以在任何平台上运行。您的应用程序在支持64位和32位应用程序的系统上以32位模式运行。您只能为面向.NET Framework 4.5的项目指定此选项。

ARM编译程序集以在具有Advanced RISC Machine(ARM)处理器的计算机上运行。

x64编译程序集,使其在支持AMD64或EM64T指令集的计算机上由64位公共语言运行库运行。

x86编译您的程序集,由32位x86兼容的公共语言运行库运行。 Itanium编译程序集由具有Itanium处理器的计算机上的64位公共语言运行库运行。

所以anyCpu表示运行32位和64位取决于你的cpu。我认为你的dll是32位所以你可以使用x86anycpu