加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

.net – 访问新签名的第三方DLL会出错

发布时间:2020-12-13 22:32:44 所属栏目:Windows 来源:网络整理
导读:我有一个使用第三方DLL的签名应用程序.这些DLL没有签名. – 到目前为止第一步没有问题:我刚刚签署了它们(使用ildasm.exe获取* .il,* .il中的publickeytoken,因为它们具有相互依赖关系,并使用ilasm.exe创建* .dll) 该项目现在编译良好,也启动. 但是在我的代
我有一个使用第三方DLL的签名应用程序.这些DLL没有签名. – 到目前为止第一步没有问题:我刚刚签署了它们(使用ildasm.exe获取* .il,* .il中的publickeytoken,因为它们具有相互依赖关系,并使用ilasm.exe创建* .dll)

该项目现在编译良好,也启动.

但是在我的代码中,调用第三方DLL的类构造函数(或其他东西? – 这是我做的第一件事),我得到错误“强名称签名程序集必须在其中指定一个公钥InternalsVisibleTo声明“

如果你有DLL的源代码似乎没有问题,并且可以通过设置调整AssemblyInfo.cs

[assembly: InternalsVisibleTo("MyProject.Domain.Tests,PublicKey=..."]

但是:如上所述,我有一个第三方DLL我没有源.所以没办法像这样解决问题.

有什么建议让这个运行?

解决方法

我有完全相同的问题.

为什么会这样

>使用InternalsVisibleTo声明第三方程序集,使其成为其他程序集的“朋友”,例如InternalsVisibleTo( “OtherAssembly”)
> .NET要求强名称程序集只能与其他强名称程序集“友好”,在这种情况下,InternalsVisibleTo属性必须指定其他程序集的公钥,例如: InternalsVisibleTo(“OtherAssembly,PublicKey = [key]”)
>在运行时,CLR发现InternalsVisibleTo没有为相关程序集正确声明,因此它会抛出异常.

怎么修

如果程序执行不需要“朋友”程序集(例如,它是未在生产中部署的测试程序集),请按照下列步骤操作:

>反汇编有问题的程序集:ildasm.exe ThirdParty.dll /OUTPUT=ThirdParty.il
>使用文本编辑器编辑IL文件,删除InternalsVisibleTo的任何声明
>汇编并签署IL:ilasm.exe ThirdParty.il / DLL /OUTPUT=ThirdParty.modified.dll /KEY=key.snk
>注意:通过以下方式生成密钥:sn.exe -k key.snk

如果程序执行需要“朋友”程序集,则必须对所有这些朋友程序集进行签名.然后按照上面的类似步骤,除了不删除InternalsVisibleTo,您必须使用正确的公钥修改每个声明.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读