C#解决引用第三方dll没有强签名问题

来源:互联网 发布:淘宝眼镜店推荐知乎 编辑:程序博客网 时间:2024/05/17 08:59

首先先看问题的引入

针对word或excel操作时,出现VS2010或VS2013中,无法嵌入互操作类型“……”,请改用适用的接口的解决方法



问了度娘,解决方法如出一辙:选中项目中引入的dll,鼠标右键,选择属性,把“嵌入互操作类型”设置为False。

问题轻松解决后,应该有很多人纠结这个“嵌入互操作类型”到底是个什么意思呢?

下面让我解释一下:

       1.”嵌入互操作类型”中的嵌入就是引进、导入的意思,类似于c#中using,c中include的作用,目的是告诉编译器是否要把互操作类型引入。

       2.“互操作类型”实际是指一系列Com组件的程序集,是公共运行库中库文件,类似于编译好的类,接口等。

       3.“嵌入互操作类型”设定为true,实际上就是不引入互操作集(编译时候放弃Com程序集),仅编译用户代码的程序集。

而设定为false的话,实际就是需要从互操作程序集中获取 COM 类型的类型信息。


进入正题:

在使用Brother打印机过程中,引用第三方的Interop.bpac.dll程序集因为没有强签名而导致编译不通过。

由因为其他工程文件全部都是带有强签名的,因此只能想办法将Interop.bpac.dll加上强签名。



    运行vs command prompt(管理员身份)

    目录:D:\ProgramFiles\Microsoft Visual Studio 12.0\Common7\Tools\Shortcuts




1、创建随机密钥对:sn -k D:/Test.snk



2、将dll文件解开:
      目录:C:\Program Files (x86)\Microsoft SDKs\Windows\v8.0A\bin\NETFX 4.0 Tools\x64

       ildasm Interop.bpac.dll /out:Interop.bpac.il
       注:将sn.exe、ildasm.exe、ilasm.exe、Interop.bpac.dll
、Test.snk都放在一个目录下,就能找到了。





3、添加签名并转回dll:ilasm /dll /res:Interop.bpac.res /key:Test.snk Interop.bpac.il /out:Interop.bpac.dll





===========================


1 0
原创粉丝点击