看《CLR VIA C#》时候看到了C#和COM组建相互转换的时候,有些东西不太明白卡住了:<,所以在网上搜了一下相关的资料:
原文地址:http://hi.baidu.com/caojuxiang/blog/item/2cdcd6cc6812751601e928b7.html
GAC全称是Global Assembly Cache
作用是可以存放一些有很多程序都要用到的公共Assembly,例如System.Data、System.Windows.Forms等等。这样,
很多程序就可以从GAC里面取得Assembly,而不需要再把所有要用到的Assembly都拷贝到应用程序的执行目录下面。举例而言,如果没有
GAC,那么势必每个WinForm程序的目录下就都要从C:\WINDOWS\Microsoft.NET\Framework\v1.0.3705下
面拷贝一份System.Windows.Forms.dll,这样显然不如都从GAC里面取用方便,也有利于Assembly的升级和版本控制。
除了系统默认放置在GAC中的Assembly如System.Windows.Forms以外,我们也可以添加自己的Assembly:
1)创建一个strong-name的Assembly,例如ToolbarComponent.dll
2)运行gacutil -i ToolbarComponent.dll,把这个Assembly添加到GAC
3)在程序中动态装载:
System.Reflection.Assembly ass=Assembly.Load("ToolbarComponent,
Version=1.0.934.20434, Culture=neutral,
PublicKeyToken=65f45658c8d4927f");
MessageBox.Show("Is the assembly loaded from GAC? "+ass.GlobalAssemblyCache);
在上面的程序中,ToolbarComponent就是从GAC装载而不是从程序的运行目录下的dll文件中装载,程序目录下不需要放置
ToolbarComponent.dll程序也能正常运行。另外,Assembly.Load()中的参数可以通过"gacutil -l"查到。
另外,上面提到了GAC中的Assembly必须是strong-name的。创建strong-name的Assembly的步骤大致如下:
a) 在命令行运行“sn -k keyPair.snk”创建一个密钥文件。这里的sn.exe也是.NET附带的一个工具。
b) 在VS.NET里面修改“AssemblyInfo.cs”文件:
[assembly: AssemblyDelaySign(false)]
[assembly: AssemblyKeyFile("..\\..\\keyPair.snk")]
c) 编译项目,就能得到一个strong-name的Assembly。
MSDN中有一些对GAC的介绍,您可以参考:
1)《Assembly Cache Viewer (Shfusion.dll)》
2)《Global Assembly Cache》
3) MSDN(Gacutil.exe资料):(VS.80).aspx
.NET Framework中附带了一些和GAC有关的工具,其中包括:
1)Gacutil.exe,一个命令行的工具,用于在GAC中浏览、添加、删除Assembly
2)Ngen.exe,也是一个命令行的工具,用于在GAC中创建Native Image
3)mscorcfg.msc,一个MMC终端,可以图形化完成Gacutil.exe的主要功能。
-------------------------------------------------------------------
例外一篇参考文章:
部分节选如下:
四:给程序添加强名(strong name)
1:创建一对密钥
用来创建密钥的工具是称为sn.exe的共享工具。通常通过命令提示运行它,该工具可执行各种任务以生成并提取密钥。我们需要用以下方式来运行sn.exe。
sn –k key.snk
其中key.snk 代表将保存密钥的文件的名称。它的名称可以是任意的,
不过习惯上带有.snk后缀名。
2:签名
签名通常是在编译时进行的。签名时,用户可利用C#属性通知编译器应该使用正确的密钥文件对DLL进行签名。要做到这一点用户需要打开工程中的AssemblyInfo.cs文件并进行修改。 [assembly:AssemblyKeyFile(“..\\..\\key.snk”)]五:编译成DLL (具体步骤)
菜单:(生成-生成)
如果一切正常,就会生成DLL文件
六:使用regsvcs.exe将Dll注册到COM+ Services里面
我们需要用以下方式运行regsvcs.exe
regsvcs dll文件名
如果一切正常的话,regsvcs.exe就会把dll输入到COM+ Services中。
至此,我们已经生成并注册了这个可以由其它程序使用的类,现在,我们来写一个控制台程序来检验这个类是否正常运行
阅读(1144) | 评论(0) | 转发(0) |