是否可以在 C# 项目中混合使用 x64/x86?

Is it possible to mix x64/x86 in a C# Project?

我们有一个 WebService 运行 有一段时间了,上面有大约 6~ 个项目。 最近,我们必须支持一个 C++ 32 位库,我进行了测试,我必须将项目的目标平台设置为 x86,否则我会得到 BadImageFormatException。所以这个新项目设置为在 x86 上编译,但其他一切都设置为 AnyCPU。

发布WebService后,调用函数时报错Unable to find ?.dll

我是否可以将这个新项目添加为 x86 而不必将我的 WCF 也设置为 x86,或者我做错了什么并且这应该有效?

这是可能的,但 所有 二进制文件(.exe-s 和 .dll-s)必须共享相同的目标平台才能工作。您不能将 32 位 DLL 加载到 64 位进程中,反之亦然。

如果您在 IIS 下托管 Web 服务,应用程序池的目标平台决定了您可以加载哪种 DLL。

如果您在非托管 DLL-s 中导出了函数,您的 P/Invoke 声明也必须与目标平台相匹配 - 具体来说,如果您传递指针,则必须将它们正确映射到 32/64-位指针。 (通常 IntPtr 会处理这个问题。)P/Invoke 如果您使用单一源代码库支持两个平台(编译成特定于平台的二进制文件),那么声明确实会变成可能的问题。

根据您要执行的操作,您可能还需要处理特定于平台的引用。 question 对此有更多详细信息。