簡體   English   中英

如何在c#.Net中找到依賴組裝路徑

[英]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獲取程序集名稱列表以查找依賴項列表。

  1. 如何獲取每個依賴程序集位置

  2. 如何獲得依賴程序集依賴關系 例如,如果在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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM