让我明白一点:
主要应用:
C#(4.0),AnyCPU。
库:
用C ++ / CLI编写的本机.dll的包装器。编译成两个版本; x86和x64,都使用相同的.snk密钥签名(使用this解决方法)
限制:
最终,x86和x64平台需要单个分发包。 由于引用了其他强名称的lib,主应用程序需要强名称。 使用托管C#和P / Invoke重写库是绝对的最后出路。
问题:
只要主应用程序在编译时引用运行时所需库的版本(x86或x64),这一切都正常。
移动相同的编译输出 - 并在安装期间使用正确的平台版本交换库 - 不起作用,因为库的签名会从引用的签名更改。
在没有任何强命名的测试应用程序中,我可以根据需要在它们之间切换。
问题:
有没有办法在设置限制范围内启用x86和x64库之间的切换,还是强制命名以防止除重写lib之外的任何可能的解决方案?
让我澄清一下,这不是一个关于找到正确的.dll(如所讨论的here)的问题,而是关于能够在找到后加载.dll的问题。
答案 0 :(得分:1)
我发现了两个版本的库之间的另一个区别;输出名称设置为nnn.dll
和nnnx64.dll
。改变它以使两者具有相同的输出名称神奇地使它全部起作用。
也许有人知道为什么这样的设置很重要,我当然不会。