HOW TO:检索应用程序当前执行代码的引用信息
Author:水如烟(http://blog.csdn.net/lzmtw)
Date: 2005-4-17
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/solutionlog/testruntimetypehandle/bin/tracelog.dll
引用Name:System,引用Dll:i:/windows/assembly/gac/system/1.0.5000.0__b77a5c561934e089/system.dll
引用Name:System.Data,引用Dll:i:/windows/assembly/gac/system.data/1.0.5000.0__b77a5c561934e089/system.data.dll
引用Name:System.Xml,引用Dll:i:/windows/assembly/gac/system.xml/1.0.5000.0__b77a5c561934e089/system.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/system.xml/1.0.5000.0__b77a5c561934e089/system.xml.dll
复制粘贴到地址栏上然后回车,就可以“下载”这个文件的了。或者你运行cmd.exe进入dos,可以dir出这些文件夹和文件的了。
文件夹gac有特别的含义,它表示system.xml.dll的缓存类型为“Gac”,这个信息你可以通过“Microsoft .NET Framework 1.1 配置”查到。
i:/windows/assembly/gac/system.xml/1.0.5000.0__b 77a 5c561934e089/system.xml.dll的意义为:
gac ,缓存类型
system.xml,程序集名称
1.0.5000.0,版本号
b
77a
5c561934e089,公钥标记
以后有必要再深入一下。如果各位有补充或修改补充的话那再好不过的了。