[英]How to find dependency assembly path in c# .Net
我試圖獲取依賴程序集名稱,從屬DLL加載的位置以及從屬DLL的依賴項。
我正在獲取“.exe”文件的路徑作為輸入。
要查找依賴項,我使用以下代碼。
var assemblies = Assembly.LoadFile("C:\\My Folder\\ MyApp.exe").GetReferencedAssemblies();
“assemblies”是System.Reflection.AssemblyName
類對象的集合。
我使用for-each獲取程序集名稱列表以查找依賴項列表。
如何獲取每個依賴程序集的位置 ?
如何獲得依賴程序集的依賴關系 ? 例如,如果在MyApp應用程序中使用myAppBase.dll,我如何獲取myAppBase.dll的依賴項。
像這樣的東西應該得到所有引用的程序集。 要將AssemblyName轉換為程序集,您必須加載它。 這將返回包含所有引用程序集的枚舉。 您不需要傳入HashSet,它只是用於遞歸調用以防止無限循環。
如果你不想保持這些加載,我建議將它們加載到一個單獨的AppDomain中,然后卸載它。
private static IEnumerable<Assembly> GetReferencedAssemblies(Assembly a, HashSet<string> visitedAssemblies = null)
{
visitedAssemblies = visitedAssemblies ?? new HashSet<string>();
if (!visitedAssemblies.Add(a.GetName().EscapedCodeBase))
{
yield break;
}
foreach (var assemblyRef in a.GetReferencedAssemblies())
{
if (visitedAssemblies.Contains(assemblyRef.EscapedCodeBase)) { continue; }
var loadedAssembly = Assembly.Load(assemblyRef);
yield return loadedAssembly;
foreach (var referenced in GetReferencedAssemblies(loadedAssembly, visitedAssemblies))
{
yield return referenced;
}
}
}
對於DLL位置,您可以使用Assembly
對象上的Location
來檢索它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.