2015-08-17 57 views
3

我想獲得一個程序集的引用程序集列表,我加載到MEF中的主應用程序。如何獲得所有引用的程序集列表(加載或不)

我想在運行插件之前確保所有引用的程序集都存在於文件夾中。

我嘗試使用

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

但是當我這樣做,那隻能說明我用/組件在該階段加載。我想要一個完整列表(在運行時)引用的程序集(VS中的引用文件夾的副本),無論它們是在那一刻還是在所有時間使用。

回答

1

您可以從文件元數據中提取該信息。最快的方法可能是使用其中的一個庫來執行此操作。

例如,你可以使用Mono.Cecil

像這樣:

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

} 
2

之前加載插件,您可以加載它反射僅將只加載文件的元數據。例如:

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

請記住,關聯的庫可以有它們的引用。

+0

歡迎來到Stack Overflow!雖然這段代碼可能會回答這個問題,但最好包含一些上下文,解釋它是如何工作的,並說明何時使用它。從長遠來看,僅有代碼的答案是沒有用的。 – ryanyuyu

+0

@Juan我試了兩種方法,他們都返回相同的列表。這裏是我期待的和我得到的照片。綠色圓點表示包含在結果列表中的引用,紅色圓點表示不包含的引用。 http://i58.tinypic.com/169glly.png – Attie

+0

由於這些庫不在您的庫中使用,並且元信息不包含有關它們的信息。 – MIVer

相關問題