C#.NET中的多目标32位和64位

时间:2012-07-09 17:07:20

标签: c# .net

假设我有一个基于C#开发的Windows应用程序。我想确保它在32位和64位两者上工作。但我不想一次又一次地更改配置设置或应用程序设置。有没有办法测试两种变体?

2 个答案:

答案 0 :(得分:12)

有几种选择。

  1. 您可以定位AnyCPU。如果您的程序是100%C#/托管代码,没有本机依赖性,这将导致它在64位操作系统上运行64位,在32位操作系统上运行32位。

  2. 目标x86。这将导致它在任何地方运行32位,这在64位Windows(通过WOW64)上正常工作。如果您使用本机(32位)库,这也可以正常工作。

  3. 进行两次构建,并进行两次单独部署。这允许您使用本机代码,并且仍然在64位操作系统上运行64位,但工作量要大得多。

  4. 由于32位应用程序在64位操作系统上运行良好,因此很少有理由在64位本地运行该程序。如果您处理大量数据并且真正需要访问比32位进程更大的内存空间,这通常才真正有用。在.NET中,这通常意味着如果要为程序使用超过1.2-1.6gb的RAM,则需要构建64位。否则,32位将无处不在。

答案 1 :(得分:3)

如果您定位AnyCPU,大多数.NET程序将在32位或64位计算机上不加改变地运行。代码将根据目标操作系统适用于32位或64位代码。

您需要谨慎使用的例外情况是将interop用于非托管代码。

如果您对非托管代码进行互操作并要求在64位平台上以64位运行,则必须进行两次构建。

如果您对非托管代码进行互操作并且可以接受作为32位进程运行,请定位x86。这避免了两个版本,并将在32位和64位平台中将您的.NET代码作为32位进程运行。