3

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

C# 项目是强命名的,包装器 .dll 也是。我尝试使用 /KEYFILE 对非托管 dll 执行相同的操作,但似乎不起作用。包装器抱怨:

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

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

4

2 回答 2

4

终于让一切正常了,即我的 C# 应用程序调用 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
于 2012-07-19T18:32:36.660 回答
3

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

以防万一:强名称不能替代代码签名证书。最大的暗示是因为您不必将一大笔钱交给任何人。

于 2012-07-18T23:56:39.763 回答