编程语言
首页 > 编程语言> > 如何在C#.Net中查找依赖程序集路径

如何在C#.Net中查找依赖程序集路径

作者:互联网

我试图获取依赖程序集名称,从中加载依赖DLL的位置以及依赖DLL的依赖关系.

我正在获取“ .exe”文件的路径作为输入.

为了找到依赖项,我正在使用以下代码.

var assemblies = Assembly.LoadFile("C:\\My Folder\\ MyApp.exe").GetReferencedAssemblies();

“程序集”是System.Reflection.AssemblyName类对象的集合.

我正在使用for-each获取程序集名称列表,以查找依赖项列表.

>如何获取每个依赖程序集的位置?
>如何获取依赖程序集的依赖关系?例如,如果在MyApp应用程序中使用myAppBase.dll,则如何获取myAppBase.dll的依赖项.

解决方法:

这样的事情应该获取所有引用的程序集.要将AssemblyName转换为Assembly,必须加载它.这将返回所有引用的程序集的可枚举.您不需要传递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来检索它.

标签:reflection,dll,net-assembly,c
来源: https://codeday.me/bug/20191110/2014019.html