在运行时我想加载程序集并需要查找其依赖程序集的名称,以便我可以确定执行给定DLL文件所需的程序集。
答案 0 :(得分:5)
您需要将程序集(DLL文件)加载到Reflection-Only context。
之后,您可以使用GetReferencedAssembles
查找依赖项。
答案 1 :(得分:4)
前段时间我用了一段令人讨厌的代码:
在加载程序集的位置,注册resolve事件:
AppDomain.CurrentDomain.AssemblyResolve += Assemblies_AssemblyResolve;
Assembly.LoadFile("<path to your assembly>");
AppDomain.CurrentDomain.AssemblyResolve -= Assemblies_AssemblyResolve;
为每个引用的dll调用resolve事件处理程序。在这里我尝试加载程序集。
Assembly Assemblies_AssemblyResolve(object sender, ResolveEventArgs args)
{
if (args.RequestingAssembly != null)
{
return LoadAssemblyFromPath(new AssemblyName(args.Name), args.RequestingAssembly.Location);
}
if (assemblyTryPath != null)
{
return LoadAssemblyFromPath(new AssemblyName(args.Name), assemblyTryPath);
}
return null;
}
实际负载发生的小助手:
private Assembly LoadAssemblyFromPath(AssemblyName assemblyName,string fullPath)
{
if (assemblyName == null||fullPath==null)
return null;
string path = Path.GetDirectoryName(fullPath);
string dllName = assemblyName.Name + ".dll";
string fullPath2Try = Path.Combine(path, dllName);
Assembly loadedAssembly = Assembly.LoadFrom(fullPath2Try);
return loadedAssembly;
}
希望,这有帮助!
答案 2 :(得分:1)
我找到了答案。如果我们想要找到卸载装配的Referenced装配,我们可以从以下方式找到。
Assembly _Assembly = Assembly.ReflectionOnlyLoadFrom(@"H:\Account.dll");
AssemblyName[] _AN = _Assembly.GetReferencedAssemblies();