为了账号安全,请及时绑定邮箱和手机立即绑定

如何解决“参考程序集没有强名称”错误?

如何解决“参考程序集没有强名称”错误?

C#
噜噜哒 2019-12-09 13:49:18
我已经在我的Visual Studio 2005项目(即强命名)中添加了一个弱命名的程序集。我现在收到错误:“引用的程序集“ xxxxxxxx”没有强名称”我是否需要签署此第三方程序集?
查看完整描述

3 回答

?
largeQ

TA贡献2039条经验 获得超7个赞

为避免此错误,您可以:


动态加载程序集,或

签署第三方程序集。

您将在.NET-fu中找到有关对第三方程序集进行签名的说明:对未签名的程序集进行签名(无延迟签名)。


签署第三方大会

签署党的基本原则是


使用ildasm.exe并拆卸中间语言(IL)来拆开装配:


ildasm /all /out=thirdPartyLib.il thirdPartyLib.dll 

重建并签名程序集:


ilasm /dll /key=myKey.snk thirdPartyLib.il

修正其他参考

除非您的第三方程序集(A.dll)引用了另一个也必须签名的库(B.dll),否则上述步骤可以正常工作。您可以拆卸,重建并签署双方A.DLL和B.DLL使用上面的命令,但在运行时,装载B.DLL将失败,因为A.DLL最初是在参考内置未签名的版本B.DLL。


解决此问题的方法是修补上述步骤1中生成的IL文件。您将需要将B.dll的公钥令牌添加到引用中。您可以通过致电获得此令牌


sn -Tp B.dll 

这将为您提供以下输出:


Microsoft (R) .NET Framework Strong Name Utility  Version 4.0.30319.33440

Copyright (c) Microsoft Corporation.  All rights reserved.


Public key (hash algorithm: sha1):

002400000480000094000000060200000024000052534131000400000100010093d86f6656eed3

b62780466e6ba30fd15d69a3918e4bbd75d3e9ca8baa5641955c86251ce1e5a83857c7f49288eb

4a0093b20aa9c7faae5184770108d9515905ddd82222514921fa81fff2ea565ae0e98cf66d3758

cb8b22c8efd729821518a76427b7ca1c979caa2d78404da3d44592badc194d05bfdd29b9b8120c

78effe92


Public key token is a8a7ed7203d87bc9

最后一行包含公钥令牌。然后,您必须在A.dll的IL中搜索对B.dll的引用,并按如下所示添加令牌:


.assembly extern /*23000003*/ MyAssemblyName

{

  .publickeytoken = (A8 A7 ED 72 03 D8 7B C9 )                         

  .ver 10:0:0:0

}


查看完整回答
反对 回复 2019-12-09
?
猛跑小猪

TA贡献1858条经验 获得超8个赞

展开使用没有“具有强名称键”的项目的项目文件,然后查找.snk文件(.StrongNameKey)。

在Windows资源管理器中浏览至此文件(只是为了知道它在哪里)。

回到项目“没有强名称键”的Visual Studio中,执行

  • 右键单击项目文件

  • 选择属性

  • 选择“签名”标签(在左侧)

  • 单击复选框“签署程序集”

  • 然后<Browse>.snk您之前找到的文件

这应该够了吧。这为我的一个项目解决了一个问题,即在同一解决方案中使用另一个项目内部的表单。

希望对您有所帮助。


查看完整回答
反对 回复 2019-12-09
  • 3 回答
  • 0 关注
  • 523 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信