wpf - 为什么我在尝试添加引用时会看到 "Unable to emit assembly: Referenced assembly ... does not have a strong name"?

标签 wpf vb.net visual-studio-2010 dll

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

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

看起来它工作得很好,但它是为 C# 编写的,我在这个项目中使用 VB.net。我下载了他的项目并将通知图标构建为 DLL,然后添加为我的项目的引用。

它抛出一个错误:

Unable to emit assembly: Referenced assembly 'Hardcodet.Wpf.TaskbarNotification' does not have a strong name

所以我正在努力找出最好的方法。我是否需要对其进行强命名,或者是否有更好的方法来做到这一点?

最佳答案

这是一个安全限制。简而言之,如果您对程序集进行强命名,您就向程序集的使用者提供了保证,即只有您的程序集及其依赖项才会在运行时加载。恶意方将无法用冒名顶替者替换您的程序集(当然,除非他们拥有您的 key )。

如果您的强名称程序集引用弱名称程序集,则无法满足该保证,因为它的依赖项可能会被冒名顶替者替换。这就是您收到编译错误的原因。

您的选择是:

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

关于wpf - 为什么我在尝试添加引用时会看到 "Unable to emit assembly: Referenced assembly ... does not have a strong name"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6205639/

相关文章:

visual-studio-2010 - VS 2010 安装项目需要 .NET 4.0,但已安装

c++ - vc++ 找不到#include <unistd.h> #include <getopt.h>

c# - 无法绑定(bind)到 ReactiveUI 中覆盖的 WPF TextBox

.net - 更改数据后自动对 Access 表中的记录重新编号

c# - POCO生成工具

mysql - 通过执行防止查询中的注入(inject)

c# - VS2010 从 VS2008 升级时失去断点命中

c# - ListView 中是否有针对空值的特殊模板或语法?

c# - 用户控件之间的WPF MVVM切换

c# - WPF DataGrid 单元格值更改事件