引用三方Dll时,产生“does not have a strong name”错误

【问题描述】

1.在项目中,右键添加三方.dll文件时,无法生成,会出现如下错误。

2.这是因为.dll文件没有使用签名文件进行签名,存在着一切安全隐患,固编辑器组织生成这一行为。

对于签名详情见博文:http://www.windowsdevcenter.com/pub/a/dotnet/2003/04/28/strongnaming.html

如图所示,dll的公钥值为null。

【解决方案】

1.我们需要一个签名文件.snk;

使用签名工具sn.exe进行签名,sn.exe工具在“C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin”目录下,在cmd中使用"set PATH=%PATH%;C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin"命令添加环境变量,这样就可以在命令行中使用;

生成一个你的密钥:sn -k mykey.snk

2.把dll文件反编译成il文件;

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

3.使用mykey.snk密钥对il文件进行签名,并输出为dll;

ilasm
/dll /key=mykey.snk
MLitJson.il

如上操作都在命令行下进行。

【结果】

最后我们可以看到MLitJson已经被签名了,这样我们就可以任意引用它了。

参考:http://www.codeproject.com/Tips/341645/Referenced-assembly-does-not-have-a-strong-name

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-08-11 03:37:13

引用三方Dll时,产生“does not have a strong name”错误的相关文章

引用项目外dll时不显示注释的解决方案

在引用项目外的dll时,显示类库中的注释可按以下步骤: 方法或变量用summary添加注释,如: /// <summary>发送post请求 /// </summary>        /// <param name="url">请求的url</param>        /// <param name="postString">发送到数据 例如:"name=xhan&password=1

VS2010 项目引用了DLL文件,也写了Using,但是编译时提示:未能找到类型或命名空间名称 &lt;转&gt;

昨天写了一个很小的winform程序,其中引用了自己写的两个dll文件. 本来认为轻松搞定,结果一编译居然提示:未能找到类型或命名空间名称..... 于是删掉两个dll重新引用,再编译结果依旧!很是郁闷. 后来经过调查,终于发现了解决方法: 在项目上点右键-->属性-->应用程序-->目标框架-->修改为.NET Framework 4. 而我原来的设置是.NET Framework 4 Client Profile.问题就出在这里. 以下是MSDN给出的提示: If you ar

.NET Winform 将引用的dll文件集成到exe中(转)

Winform程序经常需要引用一些第三方dll文件,这些dll在发布后与exe文件保存在同一目录下,虽然将dll文件集成到exe中会增大文件尺寸,但程序目录会相对整洁. 下面介绍一种比较简单的集成方法和注意事项. 第一步,将需要引用的dll文件复制到项目中 您可以:1.复制到项目根目录:2.复制到某个文件夹中. 此处以将dll复制到"lib"文件夹为例. 将要引用的dll文件复制到"lib"文件夹中 第二步,引用复制到项目中的dll文件 右键点击"引用&q

在Delphi中静态调用DLL 引用外部Dll External Dll 导入Dll

  调用一个DLL比写一个DLL要容易一些.首先给大家介绍的是静态调用方法,稍后将介绍动态调用方法,并就两种方法做一个比较.同样的,我们先举一个静态调用的例子. unit Unit1; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Edit1: TEdit; Button1: TButton;

SSIS如何引用外部DLL

原文:SSIS如何引用外部DLL 当SSIS引用外部的DLL时,外部的DLL须满足以下条件: 1. DLL是强命名. 2. 加入到GAC (C:\WINDOWS\assembly),直接把DLL拉进目录. 3. 将编译好的dll拷贝到C:\Program Files\Microsoft SQL Server\90\DTS\PipelineComponents(SQL Server 安装目录)    和C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727 然后

ASP.NET CORE MVC 2.0 项目中引用第三方DLL报错的解决办法 - InvalidOperationException: Cannot find compilation library location for package

目前在学习ASP.NET CORE MVC中,今天看到微软在ASP.NET CORE MVC 2.0中又恢复了允许开发人员引用第三方DLL程序集的功能,感到甚是高兴!于是我急忙写了个Demo想试试,我的项目结构如下: 可以看到解决方案中就两个项目,AspNetCoreWebApp就是一个ASP.NET CORE MVC 2.0的项目,而MyNetCoreLib是一个.Net Core 2.0的类库项目,为了体现AspNetCoreWebApp是通过程序集来引用MyNetCoreLib的,我还在解

直接引用MrAdvice.dll文件不能实现AOP拦截,教你1分钟解决这个问题

直接引用MrAdvice.dll文件不能实现AOP拦截,教你1分钟解决这个问题.近日工作中,要实现一个功能,那就是业务层方法里面实现自动缓存.编写业务的C#开发人员只关注如何将业务代码编写正确就可以了,而缓存的代码,大多类似,无非就是判断是否有缓存,有就取出返回,没有就调用数据库代码获取数据再缓存起来而已,于是这部分代码通过使用AOP的方式自动接管掉这种重复性代码. MrAdvice开源项目github地址:https://github.com/ArxOne/MrAdvice 直接引用MrAdv

C#中用ILMerge将所有引用的DLL打成一个DLL文件

C#中用ILMerge将所有引用的DLL打成一个DLL文件 有些文件是必须一起使用的,如果能把多个DLL打包成一个DLL文件,那么引用文件的时候就不需要一个个地去引用,而且每次移动文件的时候也不至于少了哪个必须的DLL文件. 多个DLL文件打包成一个DLL文件的方法如下:1.先到下面的网址下载ILMerge安装 http://www.microsoft.com/en-us/download/details.aspx?id=17630 2.安装完之后,执行cmd命令,进入ILMerge目录, 把t

深拷贝&amp;浅拷贝&amp;引用计数&amp;写时拷贝

(1).浅拷贝: class String { public: String(const char* str="") :_str(new char[strlen(str)+1]) { strcpy(_str,str); } ~String() { if(NULL!=_str) { delete[] _str; _str=NULL; } } private: char* _str; }; int main() { String s1("hello"); String