一楼介绍了方法,我来具体化一下代码:
你需要得到被一个特定的程序集所引用的所有程序集。这个信息可以告诉你这个程序集是否在引用一个或多个你所创建的程序集,或者你的程序集是否在引用其他特定的程序集。
解决方法:
使用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数组。
MSDN
ms-help://MS.MSDNQTR.v90.chs/fxref_mscorlib/html/2fcfa8fc-9a2b-af3a-8224-cee181149029.htm
Assembly.GetReferencedAssemblies 方法
http://www.dependencywalker.com/