首页 新闻 会员 周边

如何在一个dll里判断程序是否引用了另一个dll?

0
悬赏园豆:20 [已解决问题] 解决于 2008-10-29 13:59

如题

要用try,catch做吗

马可香蕉的主页 马可香蕉 | 初学一级 | 园豆:120
提问于:2008-10-27 18:02
< >
分享
最佳答案
0

一楼介绍了方法,我来具体化一下代码:

 

你需要得到被一个特定的程序集所引用的所有程序集。这个信息可以告诉你这个程序集是否在引用一个或多个你所创建的程序集,或者你的程序集是否在引用其他特定的程序集。

解决方法:

使用Assembly.GetReferencedAssemblies方法去得到一个程序集所引用的程序集。例如:

public static string[] BuildDependentAssemblyList(string path, List<string> assemblies)
{
  // 维护一个本程序集需要的程序集列表
  if (assemblies == null)
    assemblies = new List<string>();

  // 是否已经包含这个路径的程序了
  if (assemblies.Contains(path) == true)     

    return (new string[0]);   

  Assembly asm = null;
  // 检查这个路径
    // 看是一个程序名还是一个路径
  
if ((path.IndexOf(Path.DirectorySeparatorChar, 0, path.Length) != -1) || (path.IndexOf(Path.AltDirectorySeparatorChar, 0, path.Length) != -1)) {
     // 从这个路径加载程序集
     
asm = Assembly.ReflectionOnlyLoadFrom(path);
   }
  else
 
{
    // 是一个程序集名称
   
asm = Assembly.ReflectionOnlyLoad(path);
  }

  // 把程序集添加到列表中
 
if (asm != null)
  {
  assemblies.Add(path);
  }
  // 获取所引用的程序集
  AssemblyName[] imports = asm.GetReferencedAssemblies();

  // 遍历所有的引用,并进行递归
  foreach (AssemblyName asmName in imports) {
     BuildDependentAssemblyList(asmName.FullName, assemblies);
  }

   string[] temp = new string[assemblies.Count];
   assemblies.CopyTo(temp, 0);
   return (temp);
 }

 这段代码返回一个包含有原程序集、所有其引用的程序集和这些程序集依赖的其他程序集的string数组。

RicoRui | 老鸟四级 |园豆:3663 | 2008-10-28 09:26
其他回答(2)
0

MSDN

ms-help://MS.MSDNQTR.v90.chs/fxref_mscorlib/html/2fcfa8fc-9a2b-af3a-8224-cee181149029.htm

Assembly.GetReferencedAssemblies 方法

重典 | 园豆:2442 (老鸟四级) | 2008-10-27 21:33
0

http://www.dependencywalker.com/

octoberfirst | 园豆:275 (菜鸟二级) | 2008-10-27 23:04
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册