在x64上运行的.NET软件,但在x86上编译的任何CPU(VS2008)
问题描述:
我遇到了一个问题,我得到一个编译程序的运行时错误。这在开发环境(x86)中正常工作,但在生产环境(x64)中不起作用。在x64上运行的.NET软件,但在x86上编译的任何CPU(VS2008)
我发现this文章,这似乎意味着将软件编译为任何CPU都可以将软件作为x64软件运行,如果它运行在64位环境中的话。
是这种情况,如果是这样,软件是否应该在任何CPU下编译(因为它似乎使两个环境之间不匹配)?
答
如果您仅使用托管代码,AnyCPU非常棒。托管代码可以在32位进程或64位进程中执行。使用AnyCPU,框架会选择操作系统原生的位数。
对于非托管代码也是如此。它需要编译为32位或64位代码。当然,由于WoW64子系统,64位Windows可以运行64位进程。
但64位进程无法加载32位模块(DLL,OCX等)。
这意味着如果您的程序使用某种非托管模块,最好手动设置位数以便所有组件具有相同的位数。
这完全取决于你在做什么。如果不知道环境是什么或者你得到什么错误,很难给出建议。 – 2011-02-25 14:03:35
错误不一致,范围从程序冻结到内存访问错误。 – 2011-02-25 14:08:37
针对X64的Windows上的Windows ...不确定.NET引擎是否使用了该功能。 – 2011-02-25 14:52:35