Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#.NET中32位和64位的多目标_C#_.net - Fatal编程技术网

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

C#.NET中32位和64位的多目标,c#,.net,C#,.net,假设我有一个基于C#开发的windows应用程序。我想确保它在32位和64位上都能工作。但我不想一次又一次地更改配置设置或应用程序设置。有办法测试这两种变体吗?有两种选择 您可以针对任何CPU。如果您的程序是100%C#/托管代码,没有本机依赖项,这将导致它在64位操作系统上运行64位,在32位操作系统上运行32位 目标是x86。这将导致它在任何地方运行32位,这在64位Windows上正常工作(通过WOW64)。如果您使用的是本机(32位)库,这也可以正常工作 进行两次构建和两次单独的部署。这

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

有两种选择

  • 您可以针对
    任何CPU
    。如果您的程序是100%C#/托管代码,没有本机依赖项,这将导致它在64位操作系统上运行64位,在32位操作系统上运行32位

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

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


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

    如果您以任何CPU为目标,大多数.NET程序将在32位或64位机器上不作任何更改地运行。根据目标操作系统的需要,代码将被JIT为32位或64位代码

    需要谨慎使用的例外情况是对非托管代码使用互操作

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


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

    为什么不将其设置为32位?它是在处理大量数据还是什么?大多数32位应用程序都在64位机器上工作。基于MSIL(目标平台=任何CPU)构建将解决大多数问题。嗨,Eric,非常感谢您的知识共享,我可以请您解释对非托管或com组件的互操作如何影响吗?嗨,Reed,谢谢你的回复。那么,我能理解AnyCpu和X86之间的区别吗?如果两者的用途相同,x86将始终强制应用程序运行32位,即使您在64位系统上运行。AnyCPU将使应用程序在64位操作系统上运行64位,在32位操作系统上运行32位。对不起,现在我知道了。非常感谢Reed:)在我的应用程序中,我使用的是第三方库,目标是“AnyCPU”,其他一些dll文件目标是x86,而应用程序本身目标是x86。第三方库能否在32位机器上分发运行的应用程序。如果是,我如何解决它?