C# .NET Windows窗体应用程序是在64位操作系统中工作还是需要修改?

C# .NET Windows窗体应用程序是在64位操作系统中工作还是需要修改?,c#,.net,winforms,64-bit,C#,.net,Winforms,64 Bit,一般来说,.NET Windows窗体应用程序是在64位操作系统中工作还是需要修改?在大多数情况下,它应该可以正常工作。如果您使用本机代码执行任何操作,无论是不安全的托管代码还是interop/PInvoke,您都应该小心,但是如果您的所有代码都是托管的,您就不会有任何问题。如果它不依赖32位外部库(例如COM组件),它将作为64位进程完美地工作,并将充分利用其优势(大地址空间,x64指令集,…)。如果它依赖32位的东西,大多数情况下,通过将目标平台设置为x86,您仍然可以将其作为32位应用程序

一般来说,.NET Windows窗体应用程序是在64位操作系统中工作还是需要修改?

在大多数情况下,它应该可以正常工作。如果您使用本机代码执行任何操作,无论是不安全的托管代码还是interop/PInvoke,您都应该小心,但是如果您的所有代码都是托管的,您就不会有任何问题。

如果它不依赖32位外部库(例如COM组件),它将作为64位进程完美地工作,并将充分利用其优势(大地址空间,x64指令集,…)。如果它依赖32位的东西,大多数情况下,通过将目标平台设置为x86,您仍然可以将其作为32位应用程序运行。

纯.NET应用程序将在64位操作系统上运行,无需修改


如果使用C++/CLI库、使用特定于体系结构的COM组件或执行任何调用,则可能需要更新64位环境下的应用程序。

大多数64位操作系统能够处理32位应用程序而不会出现问题。这就是为什么会看到程序文件(x86)您的64位操作系统上的文件夹来处理许多旧的32位应用程序。

如果大多数.NET应用程序的目标是x86,而不是VS.NET默认的任何CPU,那么它们的64位应用程序应该可以不加修改地工作。

只要您不混合和匹配库平台,就可以了。编译时以x86为目标,您应该可以很好地运行。

指向此链接:

如果您有100%类型安全的托管代码,那么您真的可以将其复制到64位平台并在64位CLR下成功运行

但如果您正在使用以下任何功能:

  • 通过p/invoke调用平台API
  • 调用COM对象
  • 使用不安全代码
  • 将封送处理用作共享信息的机制
  • 使用序列化作为持久化状态的方法

这表示应用程序可能不完全兼容。

您的意思是:“如果他们/不/以x86为目标,而不是…”。只以x86为目标会产生问题。@Richard:不,jsimas是正确的。如果您只以x86为目标,您的应用程序将在64位操作系统上作为32位进程运行(就像在64位Windows上运行的本机x86 exe一样)。它将拥有与在32位操作系统上运行时几乎相同的环境。