C#.NET中的多目标支持,适用于32位和64位系统

7

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


2
为什么不直接将其设为32位?是因为要处理大量的数据或其他原因吗? - Micah Armantrout
1
大多数32位应用程序可以在64位机器上运行。 - Sam I am says Reinstate Monica
1
针对 MSIL 构建(目标平台 = 任何 CPU)将解决大多数问题。 - StuartLC
2个回答

12

有几个选择:

  1. 你可以选择目标为 AnyCPU。如果你的程序是100% C#/托管代码,并且没有本地依赖项,那么它将在64位操作系统上运行64位,在32位操作系统上运行32位。

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

  3. 进行两次构建和两次单独部署。这允许你使用本地代码并仍在64位操作系统上运行64位,但需要更多的工作。

由于32位应用程序在64位操作系统上运行良好,因此很少有原因在64位中本地运行程序。这通常只有当你处理大量数据并真正需要访问大于32位进程中可获得的内存空间时才会受益。在.NET中,这通常意味着如果你的程序要使用超过1.2-1.6GB的RAM,则需要构建64位。否则,32位将在所有地方正常工作。


嗨,里德,感谢您的友好回复。我能了解一下 AnyCpu 和 X86 之间的区别吗?如果两者都能达到同样的目的,那么它们有什么不同呢? - Jasmine
1
@Divine x86将始终强制应用程序在32位下运行,即使您在64位系统上运行。AnyCPU将导致应用程序在64位操作系统上以64位运行,并在32位操作系统上以32位运行。 - Reed Copsey
抱歉,现在我明白了。非常感谢Reed :) - Jasmine
在我的应用程序中,我正在使用针对“AnyCPU”的第三方库,还有一些针对x86的dll文件和应用程序本身也是针对x86的。第三方库会影响在32位机器上运行的应用程序吗?如果是,我该如何解决? - user1533870

3
如果你的目标是AnyCPU,大多数.NET程序将在32位或64位机器上不经修改地运行。代码将根据目标操作系统适当地jit为32位或64位代码。
需要注意的例外情况是使用interop到非托管代码时。
如果你使用interop到非托管代码并且需要在64位平台上以64位方式运行,你将需要进行两次构建。
如果你使用interop到非托管代码并且可以接受作为32位进程运行,请选择x86。这避免了两次构建,并将在32位和64位平台上将你的.NET代码作为32位进程运行。

嗨,Eric,非常感谢您的知识分享,我可以请您解释一下与非托管或组件对象模型(COM)组件的Interop如何影响吗? - Jasmine

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接