1

让我直奔主题:

主要应用:

C# (4.0),AnyCPU。

图书馆:

用 C++/CLI 编写的本机 .dll 包装器。编译成两个版本;x86 和 x64,都使用相同的 .snk 密钥签名(使用解决方法)

限制:

最后,x86 和 x64 平台需要一个单独的分发包。由于对其他强命名库的引用,主应用程序需要强名称。使用托管 C# 和 P/Invoke 重写库绝对是最后的出路。

问题:

只要主应用程序在编译时引用运行时所需的库版本(x86 或 x64),这一切都可以正常工作。

移动相同的编译输出 - 并在安装期间用正确的平台版本交换库 - 不起作用,因为库的签名与引用的签名不同。

在没有任何强命名的测试应用程序中,我可以根据需要在它们之间切换。

问题:

有没有办法在设置的限制内启用 x86 和 x64 库之间的切换,或者强命名阻止了除了重写库之外的任何可能的解决方案?

让我澄清一下,这不是关于找到正确的 .dll(如在此处讨论)的问题,而是关于一旦找到就能够加载 .dll 的问题。

4

1 回答 1

1

@Damien_The_Unbeliever's comment got me thinking and he is right in that the strong names are the same, and it was not the actual issue.

I found another difference between the two versions of the library; the output name was set to nnn.dll and nnnx64.dll. Changing it so that both have the same output name magically made it all work.

Perhaps someone knows why such a setting matters, I certainly don't.

于 2012-08-13T17:10:14.897 回答