C# 引用的程序集没有强名称

发布时间:2020-07-21编辑:admin阅读(2369)

什么是强名称程序集?

简单来说,就是为了解决Windows Dll Hell问题的,即不同公司开发同名程序集会相互覆盖。所谓强名称,就是使用RSA技术,采用一对公/私秘钥作为程序集的发布者,以进行区分,防止覆盖。

现在问题是有一个强名称程序集的工程,需要引用一个弱名称库,也就是普通库了。正常引用是失败的。错误显示是“Assembly generation failed -- 引用的程序集 'xxx' 没有强名称”。

解决办法如下:

1. 打开开始菜单,打开“VS 2017的开发人员命令提示符 ”,输入下面命令,创建一个新的随机密钥对(可以带上具体路径)。

sn -k test.snk

2. 用ildasm反编译目标程序集(假设是 a.dll)。ildasm目录如

C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin
C:\Program Files (x86)\Microsoft SDKs\Windows\v8.1A\bin\NETFX 4.5.1 Tools
C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.1 Tools
C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.8 Tools
ildasm a.dll /out=a.il

3. 用Ilasm重新编译,附带强命名参数(如果没有res资源可以省略/resource=a.res)。

ilasm a.il /dll /resource=a.res /key=test.snk /optimize

刚开始提示:'ilasm' 不是内部或外部命令,也不是可运行的程序或批处理文件。后来移到framework目录执行就可以了,如

C:\Windows\Microsoft.NET\Framework\v2.0.50727
C:\Windows\Microsoft.NET\Framework64\v2.0.50727
C:\Windows\Microsoft.NET\Framework\v4.0.30319
C:\Windows\Microsoft.NET\Framework64\v4.0.30319

4. 验证签名信息。

sn -v a.dll

OK,将生成的dll文件重新引入到项目中然后编译。

  关键字:C#引用的程序集没有强名称


鼓掌

2

正能量

0

0

呵呵

0


评论区