将 dll 链接到 c# 项目时找不到 kernel32 的 InterlockedExchange 方法

InterlockedExchange method of kernel32 not found when linking a dll to a c# project

我在 visual studio 下有一个针对 .NET Framework 4.5.2 的 C# 程序 它与另一个以 4.5.2 为目标的 C# 项目(插件)链接。该插件在其引用中有一个 dll(32 位)。 程序和插件构建配置设置为 Any CPU

现在我将它们的目标框架更改为 4.7.1。 当我启动 Programm 时,它无法加载插件。 使用 dependency walker 查看 dll,它似乎没有在 kernel32 库中找到两个方法。 见 screenshot
我对 C# 有点陌生,我觉得它很奇怪,并不真正理解发生了什么。 (那些方法以前怎么找不到,现在找不到了)..?

如果您引用 32 位 DLL,则不应编译为 "Any CPU"。如果您 运行 在 64 位机器上执行此操作,您的进程将 运行 作为 64 位进程并且将无法加载 32 位 dll。至少将 EXE 编译为 32 位。如果您的进程中的一个模块被限制为 32 位,那么您进程中的每个模块都需要是 32 位的(并且,如果一个模块是 64 位的,那么每个模块都必须是 64 位的)。

InterlockedExchange 的东西很可能是误传(请参阅上面@HansPassant 的说明)。

不要在远程位置托管屏幕截图,该网站对我来说已被屏蔽,其他人也可能被屏蔽。

Hans Passant 和 Flydog 57 的回答都是正确的。感谢 Flydog57,因为它对于像我这样的新手来说更清晰一些。 我遇到的问题是,尽管我将整个解决方案的目标平台激活为 x86,但一些子项目仍保留为 AnyCPU。 (他们没有 x86 平台,出于深奥的原因我无法创建一个)。 然而,强迫每个人都使用 x86 就做到了。 DependencyWalker 有点令人困惑,因为它一直在系统库名称旁边写上 64。来自 Linux 世界,我在链接过程中将其解释为问题,但我现在理解得更好了。 谢谢。