我有一个非托管 C++ dll,它将由托管 C++/CLI 包装器 .dll 使用,最终将由 C# 项目使用。
C# 项目是强名称的,包装器 .dll 也是如此。我尝试使用 /KEYFILE 对非托管 dll 执行相同的操作,但似乎不起作用。包装器正在抱怨:
.... is a strong-name signed assembly and embedding a manifest invalidates the signature
我是否需要对非托管 C++ 进行强命名?如果不是,我该如何解决这个问题?
终于一切正常了,即我的 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 http://blogs.msdn.com/b/vcblog/archive/2011/03/11/10140139.aspx
简而言之,要解决此问题,请在包装器 C++ 类中将其添加为要重新签名的构建后命令:
sn.exe -R $(SolutionDir)$(Configuration)\MyWrapper.dll MyKeyFile.snk
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)