让我直奔主题:
主要应用:
C# (4.0),AnyCPU。
图书馆:
用 C++/CLI 编写的本机 .dll 包装器。编译成两个版本;x86 和 x64,都使用相同的 .snk 密钥签名(使用此解决方法)
限制:
最后,x86 和 x64 平台需要一个单独的分发包。由于对其他强命名库的引用,主应用程序需要强名称。使用托管 C# 和 P/Invoke 重写库绝对是最后的出路。
问题:
只要主应用程序在编译时引用运行时所需的库版本(x86 或 x64),这一切都可以正常工作。
移动相同的编译输出 - 并在安装期间用正确的平台版本交换库 - 不起作用,因为库的签名与引用的签名不同。
在没有任何强命名的测试应用程序中,我可以根据需要在它们之间切换。
问题:
有没有办法在设置的限制内启用 x86 和 x64 库之间的切换,或者强命名阻止了除了重写库之外的任何可能的解决方案?
让我澄清一下,这不是关于找到正确的 .dll(如在此处讨论)的问题,而是关于一旦找到就能够加载 .dll 的问题。