我有一个非托管的C ++ dll,它将由托管的C ++ / CLI包装器.dll使用,最终将由C#项目使用。
C#项目名称很强,包装器.dll也是如此。我尝试使用/ KEYFILE为非托管dll做同样的事情,但似乎不起作用。包装器在抱怨:
.... is a strong-name signed assembly and embedding a manifest invalidates the signature
我是否需要对非托管C ++进行强名称?如果没有,我该如何解决这个问题?
答案 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程序集上进行验证。
以防万一:强名称不替代代码签名证书。这是最大的暗示,因为你不必向任何人交出一大笔钱。