结合C ++ / CLI,x86,x64和强命名

时间:2012-08-13 06:59:52

标签: c#-4.0 c++-cli

让我明白一点:

主要应用:

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的问题。

1 个答案:

答案 0 :(得分:1)

@ Damien_The_Unbeliever的评论让我思考,他说得对,强名也是一样的,这不是实际问题。

我发现了两个版本的库之间的另一个区别;输出名称设置为nnn.dllnnnx64.dll。改变它以使两者具有相同的输出名称神奇地使它全部起作用。

也许有人知道为什么这样的设置很重要,我当然不会。