日期:2014-01-19  浏览次数:20479 次



    Shared Sub GetReferenceInfomations()



        Dim a As System.Reflection.[Assembly] = System.Reflection.Assembly.GetExecutingAssembly



        For Each r As System.Reflection.AssemblyName In a.GetReferencedAssemblies



            Dim ra As System.Reflection.[Assembly] = System.Reflection.Assembly.Load(r.FullName)



            Console.WriteLine("引用Name:{0},引用Dll:{1}", r.Name, ra.Location)



        Next



    End Sub




 


NET应用程序对系统提供的程序集的引用采用缓存机制,我不懂这个机制,只能是看一看读一读。



上面代码在我本机运行的结果是这样的(我的系统安装在i盘,Windows2003Server):




 


引用Name:Microsoft.VisualBasic,引用Dll:i:\windows\assembly\gac\microsoft.visualbasic\7.0.5000.0__b03f5f7f11d50a3a\microsoft.visualbasic.dll



引用Name:TraceLog,引用Dll:i:\程序设计\test olutionlog\testruntimetypehandle\bin\tracelog.dll



引用Name:System,引用Dll:i:\windows\assembly\gac ystem\1.0.5000.0__b77a5c561934e089 ystem.dll



引用Name:System.Data,引用Dll:i:\windows\assembly\gac ystem.data\1.0.5000.0__b77a5c561934e089 ystem.data.dll



引用Name:System.Xml,引用Dll:i:\windows\assembly\gac ystem.xml\1.0.5000.0__b77a5c561934e089 ystem.xml.dll




 


注意到没有,它并不是引用I:\WINDOWS\Microsoft.NET\Framework\v1.1.4322里的DLL。对于用户的,它倒是到用户DLL所在地址去找。通过NET提供的某个命令(我忘了),可以将用户的DLL放到i:\windows\assembly\下,程序运行时自动到这个目录下去引用。




 


你还可以发现,一般情形下,你用资源管理器是找不到i:\windows\assembly\gac或以下的子文件夹的(我原来估计是Folder.Htt文件里头的配置,哈,Windows2003已经取消这个文件了),不知非Windows2003的系统能不能看到。但这个文件是确实存在的,你将i:\windows\assembly\gac ystem.xml\1.0.5000.0__b77a5c561934e089 ystem.xml.dll



复制粘贴到地址栏上然后回车,就可以“下载”这个文件的了。或者你运行cmd.exe进入dos,可以dir出这些文件夹和文件的了。




 


文件夹gac有特别的含义,它表示system.xml.dll的缓存类型为“Gac”,这个信息你可以通过“Microsoft .NET Framework 1.1 配置”查到。



 i:\windows\assembly\gac ystem.xml\1.0.5000.0__b77a5c561934e089 ystem.xml.dll的意义为:



gac ,缓存类型
system.xml,程序集名称
1.0.5000.0,版本号
b77a5c561934e089,公钥标记



以后有必要再深入一下。如果各位有补充或修改补充的话那再好不过的了。