|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
一个很大的类库。应用程序之所以难以跨平台,在于直接调用了特定平台的接口,而一个巨大的类库,就能极大地减少应用程序对平台的依赖。 我们在做.NetClassLibrary项目经常常会碰到如许的成绩,我想天生一个dll供别的程序利用,但在我的项目里,又必要援用一些别的的reference,像ActiveX控件或别的dll,而这些控件或dll又没有strongname,不克不及写进到GAC(GlobalAssemblyCache)中,因此,在注册利用你的dll时,就必需带上这些援用的控件或dll,才干完成注册。但是,这并非我们必要的,我们只想供应一个dll给人家用就好了,为何还要带上一堆的控件或dll呢?他人也不肯意如许。那末,有甚么举措办理这个成绩呢?
人人都晓得,在.Net中,假如你试图将一个dll写进到GAC中,那末除你的dll项目要利用strongname之外,你的项目顶用到的别的的控件或dll都必要有strongname,不然,当你注册你的dll时,会提醒短少dependency。这一点让人很烦,但应当有它的优点,利于版本把持。既然是如许,我们只要将援用到的控件或dll都加上strongname,并写进到GAC中,如许在注册你的dll时,就会到GAC中往找它所用到的控件或dll了。那末,怎样做呢?大抵分两步:
1、给必要援用的控件或dll加strongname
这是必需要做的,不然你没法把他们写到GAC中。.Net的SDK供应一个给程序集天生强名的工具,实在不但是天生,另有办理及署名的考证等,只是依据分歧的option来的。具体申明请参考MSDN。上面是经由过程sn创立一个keypair,存储在keyfile.snk中:
sn-kkeyfile.snk
如许就天生了一个密钥对。假如你的项目中没有援用别的的不带强名的控件或dll的话,只是想把本人的dll写进GAC,那末在你项目标AssemblyInfo.cs中,把AssemblyKeyFile加上,就是你方才天生的keyfile.snk文件。
[assembly:AssemblyKeyFile("....keyfile.snk")]
这里的路径是指编译后项目输入的绝对路径,以是,假如这里写成如许的话(固然你也能够修正),就应当把方才天生的keyfile.snk拷贝到项目标跟目次下,以确保在编译的时分能找到snk文件。如许,编译后的dll就能够写到GAC中了:
gacutil-iyourdll.dll
假如你的项目中援用了别的的不带有强名的控件或dll的话,就必要再做下一步。
2、给不带有强名的控件或dll加上强名
这里要用到两个工具,也是.Net自带的,tlbimp和aximp。tlbimp是将COM范例库中的范例界说转换为CLR程序集的等效界说,aximp是将COM范例库中的范例界说转换为windows窗体控件,具体申明请参考MSDN。
假定你要给tom.dll和MSFlxGrd.ocx加上强名:
tlbimptom.dllkeyfile:tom.dll.snkout:tom.dll
aximpMSFlxGrd.ocxkeyfile:MSFlxGrd.ocx.snkAxMSFlxGrd.ocx.snk
这里,tom.dll.snk、MSFLlxGrd.ocx.snk和AxMsFlxGrd.ocx.snk是依据第一步发生的,每个dll都要对应一个snk。tom.dll为转换过的dll的名字,没有甚么别的寄义。别的必要申明的是MSFlxGrd.ocx会发生两个dll,分离是MSFlexGridLib.dll和AxMSFlexGridLib.dll。团体了解为在窗体初始化时会发生一个AxMSFlexGridLib,不知谁有更好的注释?
如许就把tom.dll和MSFlxGrd.ocx控件加上了强称号并转换为响应的dll了,再把它们写进到GAC中:
gacutil-itom.dll
gacutil-iMSFlexGridLib.dll
gacutil-iAxMSFlexGridLib.dll
剩下的事情就是将它们从头援用到你的项目中,从头编译,如许天生的dll在注册时就不必要任何dependency了,由于它们已在GAC中了,翻开c:winntassembly便可看到。
假如要将它们从GAC中删除,则:
gacutil-utom
gacutil-uMSFlexGrid
gacutil-uAxMSFlexGrid
tom、MSFlexGrid和AxMSFlexGrid为GAC中的名字,这里不必要加任何路径。
竟发现没有太大的帮助。总觉得要用起来,感觉到不了位。因为公司机器的原因,一直没有安装vs.net(也从来没有用过)。以前做asp的时候一直用DW(感觉其代码联想功能不错),可现在到了asp.net却不习惯了。 |
|