如何在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