我有一个为 .NET 2.0 编写并针对 的现有 C# 应用程序AnyCPU 在这一刻。它目前引用了一些我没有源代码的第三方 .NET DLL(我不确定它们是为 x86、x64 还是 AnyCPU 构建的)。
如果我想专门在 64 位 Windows 操作系统上运行我的应用程序,我应该以哪个平台为目标才能让我的应用程序无错误地运行?我目前的理解是针对:
另外,我是否正确地相信,虽然在构建引用第三方 x86 .NET DLL 的应用程序时以 AnyCPU 为目标不会产生任何错误,但当应用程序在 64 位操作系统上运行时尝试加载这些 DLL 时,它会引发运行时异常。
因此,只要我的第三方 DLL 之一正在执行 p/Invoke 或者是 x86,我只能针对此应用程序以 x86 为目标吗?
最佳答案
您可以从 AnyCPU DLL 执行 P/Invoke,您只需要对 P/Invoke 定义更加小心(即您不会无意中假设为 32 位或其他内容)。问题是很难知道第 3 方 DLL 是否在没有 Reflector 和反汇编的情况下做正确的事情(当然,除非开发人员特别声明支持 64 位)。
但除此之外,你几乎是准确的。
老实说,对于 99% 的应用程序,以 x86 为目标是完全可以接受的。实际上受益于 64 位的应用程序数量相对较少。 (性能问题通常会出现一些问题:更多的寄存器被 x86 模式的寄存器重命名和更大的数据结构所抵消,因为指针是原来的两倍 [在像 .NET 这样的引用繁重的系统中更糟])
关于.net - 为 64 位窗口操作系统构建时针对 x86 与 AnyCPU,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2947264/