如何用这篇文章解决我们的工程对普通COM组件的引用:《引用ActiveX/COM组件时的Strong Name》

active|activex|解决

 CSharp Tips:引用ActiveX/COM组件时的Strong Name     选择自 Mittermeyer 的 Blog  问题DotNet平台下提供了比较完备的类库,但是第一个版本总归不可能面面俱到,而且由于历史遗留问题,经常会和COM/ActiveX的组件之间进行互操作。笔者碰到的问题就是在一个Assembly中调用到了Excel的对象,但是该Assembly需要封装成为一个ActiveX的Control,供IE的客户端脚本调用。简而言之,我在C#中用到了一个COM组件,还需要把自己封装成一个COM组件,听起来有点多余不过想不到更好的办法。在这样的封装模式下碰到了一个问题,如果一个Assembly希望封装成为ActiveX/COM组件,那么它必须拥有强名(Strong Name),也就是说在编译的时候需要指定SNK(Strong Name Key)。但是当一个Assembly如果以拥有强名的方式编译的话,它又要求所以自身所引用的其他Assembly都必须拥有强名,否则不能够成功编译。而当我们在工程中直接引用一个COM组件(例如:Excel 10 Object Library),VS.Net能够帮助我们自动导入类型库,但是此时的引用类型库是没有强名的,在笔者所期望的环境下无法编译成功。 解决碰到这个问题觉得很棘手,似乎陷入和死循环,不过查阅一下文档,发现还是非常容易解决的,DotNet Framework中提供了相应的工具能够转换COM的类型库,他就是TlbImp.exe(大家可以在类似“C:\Program Files\Microsoft Visual Studio .NET 2003 DK\v1.1”的目录中找到)。TlbImp能够将一个COM组件包装成为DotNet可以使用的类库的形式,VS.Net的自动转换想必也是以来这个工具。该工具有很多参数开关,需要支持强名只要额外打开一个开关即可。一下介绍笔者认为最可能用到的参数:/out:Filename:类型库转换之后输出文件的名称。/namespace:Namespace:类型库转换所使用的名称空间。/keyfile:FileName:指定转换时使用的SNK文件,指明该参数,构造之后的类型库就拥有了强名。完整的例子如下:tlbimp excel.exe /out:interop.excel.dll /namespace:Excel /keyfile:excel.snk其中snk文件可以通过DotNet中的另一个工具SN生成,此处不再赘述。完成上述工作,在工程中直接引用我们自己构造的类型库,就可以成功的编译拥有强名的DLL了。 如果是控件,而不是普通的Component,那么就不能够使用tlbimp,而需要使用aximp.exe这个工具,使用方法与tlbimp类似,他会生成两个文件:一个是类型库的代理文件,另一个是Windows Form的代理文件。 进一步解决然而还有更加简单的解决办法,就是在工程属性中设置“Wrapper Assembly Key File”(Common Properties\General\Wrapper Assembly Key File),这个属性。设置了该属性之后通过Add Reference添加的COM/ActiveX组件,都将被标识,拥有强名。这需要一次设置就可以了,应该更加方便。  参考文档Tlbimp相关:http://msdn.microsoft.com/library/en-us/cptools/html/cpgrfTypeLibraryImporterTlbimpexe.aspSN相关:http://msdn.microsoft.com/library/en-us/cptools/html/cpgrfStrongNameUtilitySNexe.aspAximp相关:http://msdn.microsoft.com/library/en-us/cptools/html/cpgrfwindowsformsactivexcontrolimporteraximpexe.aspC#工程的属性说明:http://msdn.microsoft.com/library/en-us/cscon/html/vcurfCProjectGeneralPropertyPage.asp

时间: 2024-10-03 23:12:12

如何用这篇文章解决我们的工程对普通COM组件的引用:《引用ActiveX/COM组件时的Strong Name》的相关文章

微软的这篇文章能彻底解决visual interdev的调试问题(那位仁兄E文好,把她翻译一下)

interdev|visual|解决|微软|问题 微软的这篇文章能彻底解决visual interdev的调试问题需要安装visual interdev server,在visual studio 6.0的第二张盘上 HOWTO: Configure Your Web Server for Visual InterDev 6.0 ASP Debugging ----------------------------------------------------------------------

如何用 Caffe 生成对抗样本?这篇文章告诉你一个更高效的算法

Fast Gradient Sign方法 先回顾一下<杂谈CNN:如何通过优化求解输入图像>中通过加噪音生成对抗样本的方法,出自Christian Szegedy的论文<Intriguing properties of neural networks>: 其中n是要求的噪音,是相应的系数,L是x+n属于某个类别的loss,c是某个错误类别的标签.论文中用来得到图像噪声的办法是L-BFGS,这个方法虽然稳定有效,但是很考验算力的,Christian在Google反正机器多又强,用这个

安防人 这篇文章你能看懂多少?

安防人 这篇文章你能看懂多少? 在互联网技术高速发展的今天,因网络的开放性.隐蔽性.跨地域性等特性,许多安全问题亟待解决,比如在过去的2015年,全球便发生了多起网络安全事件,如美国人事管理局OPM数据泄露,规模达2570万,直接导致主管引咎辞职:英宽带运营商TalkTalk被反复攻击,400余万用户隐私数据终泄露:摩根士丹利35万客户信息涉嫌被员工盗取:日本养老金系统遭网络攻击,上百万份个人信息泄露等. 虽然这些数据我们时常耳闻,但安防行业人士仍然会认为网络安全问题距离我们仍很遥远甚至无关,但

近期我在CSDN的《畅言》栏目上发表的几篇文章

        CSDN的<畅言>栏目给大家自由表达个人意见的平台,实在是非常的不错.本人近期在上面发表的3篇文章如下:         1. <程序员既要写好代码,又要写好文档>:http://www.csdn.net/article/2014-08-12/2821148         写作原因:在实际的软件开发项目中,很多同事把绝大部分的精力放在了写代码上,根本不注重文档的编写.这就导致一个软件的代码只有少数几个人(也许就只有一个人)能够看懂,到后面有人来接手的时候,就会双眼

我看过的关于职业规划最好最全面的一篇文章

转自:点击打开链接 在担任公司高管的几年间,我面试过数以百计的各个层面的员工,其中最让我感到遗憾的一个现象就是很多人有着非常好的素质,甚至有的还是名校的毕业生,因为不懂得去规划自己的职业,在工作多年后,依然拿着微薄的薪水,为了一份好一点的工作而奔波.很多这样的人,他们只要稍微修正一下自己的职业方向,就能够在职业发展上走得更从容.  有一次一个大连理工大学的研究生,好像是学电子的,来应聘我们的公关企划部部长.那小伙长得不错,将近一米八的身高,很阳光,个人素质也很好.他研究生毕业后去了一家稍微有点规

一篇文章,教你学会Git

在日常工作中,经常会用到Git操作.但是对于新人来讲,刚上来对Git很陌生,操作起来也很懵逼.本篇文章主要针对刚开始接触Git的新人,理解Git的基本原理,掌握常用的一些命令. 一.Git工作流程 以上包括一些简单而常用的命令,但是先不关心这些,先来了解下面这4个专有名词. Workspace:工作区 Index / Stage:暂存区 Repository:仓库区(或本地仓库) Remote:远程仓库 工作区 程序员进行开发改动的地方,是你当前看到的,也是最新的. 平常我们开发就是拷贝远程仓库

卷积神经网络不能处理“图”结构数据?这篇文章告诉你答案

本文要介绍的这一篇paper是ICML2016上一篇关于 CNN 在图(graph)上的应用.ICML 是机器学习方面的顶级会议,这篇文章--<< Learning CNNs for Graphs>>--所研究的内容也具有非常好的理论和实用的价值.如果您对于图的数据结构并不是很熟悉建议您先参考本文末的相关基础知识的介绍. CNN已经在计算机视觉(CV)以及自然语言处理等领域取得了state-of-art 的水平,其中的数据可以被称作是一种Euclidean Data,CNN正好能够

三篇文章了解 TiDB 技术内幕 —— 谈调度

任何一个复杂的系统,用户感知到的都只是冰山一角,数据库也不例外. 前两篇文章介绍了 TiKV.TiDB 的基本概念以及一些核心功能的实现原理,这两个组件一个负责 KV 存储,一个负责 SQL 引擎,都是大家看得见的东西.在这两个组件的后面,还有一个叫做 PD(Placement Driver)的组件,虽然不直接和业务接触,但是这个组件是整个集群的核心,负责全局元信息的存储以及 TiKV 集群负载均衡调度. 本篇文章介绍一下这个神秘的模块.这部分比较复杂,很多东西大家平时不会想到,也很少在其他文章

这篇文章很好的诠释了为什么安全框架如此重要?

本文讲的是这篇文章很好的诠释了为什么安全框架如此重要?,很多安全公司没有研究.开发和实现各种各样的项目框架不也运营的还行么?那我们为什么还要专门弄个团队来干这事儿呢?然而,"运营得还行"本身就是答案的一部分.在缺乏可见后果的情况下,安全主管和从业员工需要遵循框架来更有效理解自己的工作. 首先,得承认信息安全是一门历史不足30年的新兴学科.与IT其他方面和非计算机相关产业相比,信息安全还只处于婴儿期.不过,随着这一行业的成熟发展,杰出的领导者们开始共享自己的成功与困难,发展出供其他人遵循