首页 > 编程知识 正文

C#需要强名称程序集,HRESULT:0x80131044

时间:2023-05-04 08:06:05 阅读:228966 作者:1107

System.IO.FileLoadException: 需要强名称程序集。 (异常来自 HRESULT:0x80131044)

这个问题,可能是需要进行程序集签名。

我的发生场景是在使用Shell的时候,我的Shell功能,会使用到其它的程序集,而其它的程序集又会使用到更多其它的程序集。其中有些程序集还是Nuget中引用安装的。

我只能控制我自己开发的程序集对它进行签名,而无法控制Nuget包引用的程序集让它们签名。

 

好吧,下面关于如何进行程序集签名,说下解决方案:

第一步:右键打开你的项目属性

第二不:切换到签名

第三步:新建一个签名。你会看到我已经有了1个签名,为了演示,你忽略我这个已经建立好的签名即可。

第四步:创建你的签名即可。密码自己想要就写,不是必须的。

下面说下,你没有源码的Nuget包,要怎么加上程序集签名:

以EpPlus.dll为例,这是一个从Nuget服务器上下载的无源码的dll,它的功能是用于处理Excel的。做过Excel的同学,估计对此dll应该熟悉。

第一步,使用Everything这个软件查找ildasm.exe的目录

当然,你可能没有Everything这个软件,不过这是你的事情。没有软件的话,你就只能自己手动去搜索了。

第二步,根据您的dll性质,选择相应的ildasm工具进行反汇编。

特别提醒,你是.net core的dll或者是.net framework的dll,使用的ildasm工具是不同的。别看上面搜索出来的ildasm.exe文件名一样,实际是有区别的。

第三步,打开你的cmd命令提示窗口,cd导航到指定的idlasm路径,运行以下代码

将出现以下界面:

第四步,反汇编后,会得到以下的东西,我是放在了E:盘,所以E盘下将会生成下图的东西

第五步,使用文章开头的方式,生成一个签名文件Key.snk,如果不会,请回到文章开头去看。

然后我把Key.snk拷入E盘,跟反汇编生成的文件放在一起。

第六步,使用Everything工具,查找ilasm.exe工具,该工具用于正汇编,意思就是将刚才反汇编出来的文件再次正向汇编。

请您注意,一个是ildasm.exe工具,一个是ilasm.exe工具,中间相差一个字母d,是有区别的。

第七步,进入你的cmd命令提示行,cd到指定的ilasm.exe工具下,键入正向汇编命令

第八步,执行该指令,得到下图结果

于是在我的E盘生成了一个叫epplus1.dll的文件,为什么叫epplus1.dll?因为我的命令中指定了它的名字就叫这个。

于是我的E盘多了一个,如下图所示。然后你就可以用这个签名后的dll去干活了。

 

以上步骤中,会出现ilasm无法正向汇编的情况,原因是在使用ildasm进行反汇编的时候,你使用错了工具,.net core和.net framework,以及x86、x64使用的反汇编工具是不一样的,别看那里有很多的ildasm工具,虽然名字一样,但每个工具实际是不一样的。当发生这种错误的时候,你反汇编多试几次就可以找到正确的反汇编和正汇编工具了。

 

最后为了给您方便,特意提供命令如下,供您拷贝:

ildasm E:EPPlus.dll /output=E:EpPlus.ililasm E:EpPlus.il /dll /output=E:epplus1.dll /Key=E:Key.snk /Resource=E:EpPlus.res

 

祝您用餐愉快。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。