C#关于程序集生成失败【引用DLL及第三方DLL没有强名称的解决办法】

原创 2017年04月19日 14:29:06

  C#关于程序集生成失败及引用DLL及第三方DLL没有强名称,一个Assembly希望封装成为ActiveX/COM组件,那么它必须拥有强名(Strong Name),也就是说在编译的时候需要指定SNK(Strong Name Key);但是当一个Assembly如果以拥有强名的方式编译的话,它又要求所有自身所引用的其他Assembly都必须拥有强名,否则不能够成功编译。这时可以使用按照以下方式来创建或重建一个名称程序集。

首先要创建一个密钥对(以VS2013为例):

1、运行在“开始菜单”-“程序”-“Visual Studio 2013”-“Visual Studio Tools”-“VS2013 x64 兼容工具命令提示”(双击鼠标执行)如下图:


2、创建一个强名称程序集密钥文件文件

输入命令:sn -k xxxxxx.snk,如下图:


点击回车执行命令,如下图:


3、为类库绑定密钥文件

    (1)a. 如果你有要引用的类库的源代码,可以在类库项目中的AssemblyInfo.cs源文件中加入如下面的属性:
                  [assembly:AssemblyKeyFile("C:\keypair.snk")]

  备注:如果有源代码的情况下,也可以直接使用项目配置来使类库项目直接生成并绑定密钥对。配置如:右击“类库项目”->“属性”->“签名”选项卡->选择“为程序集签名”复选框->“选择强名称密钥文件(K):”下拉框->“新建”或“浏览”选择一个已存在的密钥文件。

b. 生成项目即可得到拥有强名称的类型库

      (2)如果你只有第三方的类库(xxxxxx.dll)文件而没有源码项目的话,需要继续做如下操作。

               a. 使用类库文件获取微软中间语言(MSIL)源码文件。

               输入:ildasm D:\xxxxxx.dll /out:xxxxxx.il(默认路径为:D:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin\x86_amd64)

             

   

               b. 使用MSIL源码文件(xxxxxx.il)和新生成的(keypair.snk)密钥文件创建新的程序集类库文件

                输入:ilasm xxxxxx.il /dll /key=keypair.snk(操作方法同上)


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

关于程序集生成失败 -- 引用的程序集没有强名称的解决办法

关于程序集生成失败 -- 引用的程序集没有强名称的解决办法  我在PetShop4程序中加入了一个业务外观层,然后在业务逻辑层(PetShop.BLL)引用这个程序集,点“生成”,出现以下的错误:“程...
  • a497785609
  • a497785609
  • 2010年07月15日 22:19
  • 7995

引用程序集没有强名称解决办法

引用程序集没有强名称解决办法(http://www.cnblogs.com/tearer/archive/2010/09/01/1814655.html) 为项目添加强名...
  • jiftlixu
  • jiftlixu
  • 2016年03月10日 16:02
  • 3049

Assembly generation failed -- 程序集生成失败 -- 引用的程序集没有强名称(转载学习)

Assembly generation failed -- 程序集生成失败 -- 引用的程序集没有强名称 转载地址:http://zzy.my/post/2011/09/19/Assembly-...
  • canhui2009
  • canhui2009
  • 2012年08月16日 16:39
  • 1458

引用程序集没有强名称解决办法

没有源码的DLL文件添加强名称   如果项目中引用了其他没有源码的dll文件,并且此dll文件是没有强名称的程序集,则编译时会出现类似 "Assembly generation failed --...
  • lovegonghui
  • lovegonghui
  • 2016年01月11日 14:20
  • 235

引用程序集没有强名称解决办法

为项目添加强名称方法: 1.右键单击项目,打开属性窗口; 2.在属性窗口里选择《签名》标签,选中为程序集签名的选项,在下拉列表里选择新建,如下图所示: 3.打开新建签名窗口,...
  • CSDNCShuan
  • CSDNCShuan
  • 2016年05月22日 23:00
  • 980

关于程序集生成失败-引用的第三方DLL没有强名称的解决办法

如果一个Assembly希望封装成为ActiveX/COM组件,那么它必须拥有强名(Strong Name),也就是说在编译的时候需要指定SNK(Strong Name Key)。但是当一个Assem...
  • donnie88888888
  • donnie88888888
  • 2016年10月06日 12:02
  • 1508

C#中.snk文件的作用【转】

SNK,作为程序后缀的时候,是.net中的强密匙加密文件!当你把一个程序集放进GAC(全局程序集缓存)时,就要加强名(也就是签名),在GAC中的程序集可以被所有程序引用访问(相当于以前COM组件在注册...
  • gyc1105
  • gyc1105
  • 2011年07月21日 16:56
  • 21529

C#程序 调用第三方DLL控件的一些小启示

对于我们的程序需要用到第三方控件(已经编译好的DLL),这样我们只能用DllImport 方法来加载此DLL文件。当然了,如果省略写,则把此DLL文件拷贝到对应的程序目录下。 我们对于用VC编写的标...
  • nihongyuan
  • nihongyuan
  • 2012年10月25日 13:06
  • 3052

关于C#应用第三方控件dll的使用方法及常见问题

在引用第三方控件是需要先了解第三方所提供的方法,一个完整的引用还需要提供方给出二次开发方案。这些不用都说,对于不同项目可能用法也是不同具体问题具体分析! 第三方控件一般会与COM方式提供,我们需要导入...
  • TracyMen
  • TracyMen
  • 2016年02月18日 22:57
  • 3002

C# VS中进行编译发现没有错误但是无法生成的原因

可能是所编译的项目的框架低于其中引用的dll的项目框架。
  • zhengxiaotaozz
  • zhengxiaotaozz
  • 2017年06月12日 09:44
  • 478
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C#关于程序集生成失败【引用DLL及第三方DLL没有强名称的解决办法】
举报原因:
原因补充:

(最多只允许输入30个字)