4

是否可以将针对“任何 CPU”编译的 WinForms 应用程序配置为在 64 位服务器上作为“x86”运行而无需重新编译应用程序?具体来说,我正在寻找一个 app.config 设置或控制面板小程序来实现这一目标。客户所有的客户端都是x86的,但是服务器是x64的,我们喜欢在服务器上安装WinForms应用,供管理员配置和监控系统。我们宁愿不只为服务器重新编译。

4

2 回答 2

11

来自http://www.request-response.com/blog/PermaLink,guid,34966ef8-3142-46b2-84e0-372b5c36ddcc.aspx

但是,即使在您的代码已编译之后,您也可以控制和覆盖此默认行为。SDK 中有一个名为 corflags.exe 的便捷工具,可让您强制“anycpu”编译代码在 64 位世界中使用 32 位进程。

此实用程序的用法可在此处找到http://msdn.microsoft.com/en-us/library/ms164699(VS.80).aspx

于 2008-10-09T14:58:49.867 回答
1

如果您正确编写了托管代码,则不需要进行任何配置。只要 64 位机器安装了正确的框架,JIT 进程就会处理 32 位和 64 位要求之间的任何差异。

在您自己的代码中唯一需要关注的是您是否正在执行任何 P/Invoke。在这种情况下,任何时候调用使用 HANDLE 或 void* 类型的 API 函数时,都需要确保始终使用 System.IntPtr,而不是 System.Int32。在 .NET 世界中,int 数据类型始终为 32 位,即使在 64 位机器上也是如此。同样,无论什么架构,long 总是 64 位。

然而,IntPtr 始终是 void* 的大小,因此根据您运行的机器的体系结构,JIT 的大小也不同。

于 2008-10-09T15:08:51.517 回答