当我尝试添加引用时,为什么会出现“无法发出程序集:所引用的程序集...没有强名称”的错误信息?

5

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

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

看起来这个程序很好用,但是它是用C#编写的,而我正在使用VB.net进行这个项目。我下载了他的项目并将notifyicon构建为DLL文件,然后将其添加为我的项目的引用。

它会抛出一个错误:

无法发出程序集:所引用的程序集“Hardcodet.Wpf.TaskbarNotification”没有强名称

因此,我正在尝试找出最佳方法继续进行。我需要对它进行强命名,还是有更好的方法?

3个回答

14

这是一个安全约束。简单来说,如果你对你的程序集进行强名称命名,你向你的程序集的使用者提供了一个保证:只有你的程序集及其依赖项会在运行时加载。除非他们拥有你的密钥,否则恶意方不能用伪装者替换你的程序集。

如果你的强名称程序集引用了弱名称程序集,那么这个保证无法实现,因为它的依赖项可能被替换成伪装者。这就是为什么你会得到编译错误的原因。

你的选择是:

  1. 从你的程序集中删除强名称。
  2. 在编译时对第三方代码进行强名称命名。在你的情况下,这很容易实现,因为你正在从源代码构建。
  3. 使用ILMerge对第三方二进制文件进行强名称命名。如果你不是从源代码构建,并且第三方忘记签署他们的程序集,这是一个有吸引力的选择。

10

你需要为另一个程序集添加一个强名称,或者让你的项目不包含强名称。

既然你已经在构建它,你可以在项目属性中添加一个强名称,并重新构建。 这样做后,它应该可以工作(而无需更改任何代码)。


5
他的意思是你必须签字。 - user407749

1
简单来说,这意味着您有一个名为AssemblyA的项目引用了AssemblyB。AssemblyA已签名,而AssemblyB未签名。
您需要决定是也对AssemblyB进行签名,还是不对AssemblyA进行签名。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接