如何获取所有引用程序集的列表(已加载或未加载)

时间:2015-08-17 13:10:15

标签: c# .net .net-assembly

我正在尝试获取我在MEF中加载到主应用程序中的程序集的引用程序集列表。

我想确保在运行插件之前所有引用的程序集都存在于该文件夹中。

我尝试使用

List<AssemblyName> a = Assembly.GetEntryAssembly().GetReferencedAssemblies().ToList();

但是当我这样做时,它只显示我在那个阶段使用/加载的程序集。我想要一个完整的列表(在运行时)引用的程序集(VS中引用文件夹的副本),无论它们是在那一刻使用还是根本使用。

2 个答案:

答案 0 :(得分:2)

在加载插件之前,您可以加载它仅用于反射,只加载文件的元数据。例如:

    var assm = Assembly.ReflectionOnlyLoadFrom(@"Same.dll");
    var reff = assm.GetReferencedAssemblies();

请记住,相关的库可以有他们的参考。

答案 1 :(得分:1)

您可以从文件元数据中提取该信息。最快的方法可能就是使用其中一个库来实现。

例如,您可以使用Mono.Cecil

像这样:

var md = ModuleDefinition.ReadModule(assemblyPath);
foreach (var reference in md.AssemblyReferences)
{

}