如何确定代码中的.net程序集依赖关系

如何确定代码中的.net程序集依赖关系,.net,.net-assembly,system.reflection,.net,.net Assembly,System.reflection,如何确定特定.net dll/exe正在使用哪些其他dll/exe?简单地说,我想找出全局程序集缓存中特定.net dll/exe的依赖项。如何通过system.reflection读取它?正如他在评论中指出的,您可以使用getReferenceAssemblys方法检索dll的引用程序集(即“已知”依赖项): 如果您使用版本、区域性和PublicKeyToken完全限定程序集,则Assembly.Load()方法将从GAC加载程序集 Assembly.getReferencedAssembly

如何确定特定.net dll/exe正在使用哪些其他dll/exe?简单地说,我想找出全局程序集缓存中特定.net dll/exe的依赖项。如何通过system.reflection读取它?

正如他在评论中指出的,您可以使用
getReferenceAssemblys
方法检索dll的引用程序集(即“已知”依赖项):


如果您使用
版本
区域性
PublicKeyToken
完全限定程序集,则
Assembly.Load()
方法将从GAC加载程序集

Assembly.getReferencedAssemblys()。这些是已知的依赖项,程序集中的反射代码可以添加未知的依赖项。您还必须挖掘嵌入式资源。COM互操作和pinvoke增加了更多。我们是否可以只加载gac dll而不提供版本?不,您必须提供程序集的版本。否则,您将收到一个
FileNotFoundException
。但是,您可以通过尝试浏览GAC的内容(如本答案中的内容)来发现这些额外的详细信息:
var assembly = Assembly.Load("Microsoft.ActiveDirectory.Management, Version=6.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35");
var referencedAssemblies = assembly.GetReferencedAssemblies();
foreach (var referencedAssembly in referencedAssemblies)
{
     Console.WriteLine(referencedAssembly.FullName);
}