HOW TO:检索应用程序当前执行代码的引用信息
2024-07-21 02:16:12
供稿:网友
 
 
    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,公钥标记
以后有必要再深入一下。如果各位有补充或修改补充的话那再好不过的了。