非托管C ++ - 需要具有强名称的C ++ / CLI dll引用的强名称?

时间:2012-07-18 22:51:38

标签: c++ visual-studio-2010 strongname

我有一个非托管的C ++ dll,它将由托管的C ++ / CLI包装器.dll使用,最终将由C#项目使用。

C#项目名称很强,包装器.dll也是如此。我尝试使用/ KEYFILE为非托管dll做同样的事情,但似乎不起作用。包装器在抱怨:

.... is a strong-name signed assembly and embedding a manifest invalidates the signature

我是否需要对非托管C ++进行强名称?如果没有,我该如何解决这个问题?

2 个答案:

答案 0 :(得分:4)

最后让它全部正常工作,即我的C#app调用C ++ / CLI包装器dll,它调用本机C ++ DLL中的类!

解决问题:

mt.exe : general warning 810100b3: ... MyWrapper.dll is a strong-name signed assembly and embedding a manifest invalidates the signature. You will need to re-sign this file to make it a valid assembly.

重要提示:事实证明,引用类中的强名称不是问题。

事实证明,在这种情况下VS如何签署包装器dll有问题。请参见链接:http://blogs.msdn.com/b/vcblog/archive/2011/03/11/10140139.aspx

简而言之,要解决此问题,请在您的包装器C ++类中,将其添加为Post Build命令以重新签名:

sn.exe -R $(SolutionDir)$(Configuration)\MyWrapper.dll MyKeyFile.snk

答案 1 :(得分:3)

无法对本机DLL进行强名称。最重要的是因为这样做毫无意义,只有CLR才能验证强名称,并且只能在.NET程序集上进行验证。

以防万一:强名称​​不替代代码签名证书。这是最大的暗示,因为你不必向任何人交出一大笔钱。