在尝试添加引用时,为什么会看到"无法发出程序集:引用的程序集...没有强名称"?

And*_*273 5 vb.net wpf dll visual-studio-2010

我想在我的WPF项目中包含一个系统托盘图标,并找到了这个资源:

http://www.hardcodet.net/projects/wpf-notifyicon

看起来它会很漂亮,但它是为C#编写的,我正在使用VB.net进行这个项目.我下载了他的项目并将notifyicon构建为DLL,然后添加为我的项目的参考.

它引发了一个错误:

无法发出汇编:引用的汇编'Hardcodet.Wpf.TaskbarNotification'没有强名称

所以我想弄清楚最好的方法.我是否需要强名,或者有更好的方法吗?

Ken*_*art 14

这是一个安全约束.简而言之,如果您强烈命名程序集,那么您将为程序集的使用者提供保证,即只在运行时加载程序集及其依赖项.恶意方将无法用冒名顶替者取代您的程序集(当然,除非他们有您的密钥).

如果强名称程序集引用弱命名的程序集,则无法满足该保证,因为它的依赖项可以替代冒名顶替者.这就是你得到编译错误的原因.

你的选择是:

  1. 从程序集中删除强名称.
  2. 在编译时强烈命名第三方代码.这在您的情况下很容易,因为您从源代码构建.
  3. 使用ILMerge强烈命名第三方二进制文件.如果您不是从源代码构建而且第三方忽略了签署程序集,那么这是一个很有吸引力的选择.


Ree*_*sey 10

您需要向其他程序集添加强名称,或者使项目不包含强名称.

由于您已经在构建它,因此您只需在项目属性中添加一个强名称,然后重建即可.一旦你这样做,它应该工作(根本不改变代码).

  • 他的意思是你必须签名. (5认同)