在运行时,我想加载一个程序集并需要找到它的依赖程序集的名称,以便我可以确定执行给定的 DLL 文件需要哪些程序集。
问问题
1321 次
3 回答
5
您需要将程序集(DLL 文件)加载到Reflection-Only context 中。
之后,您可以使用GetReferencedAssembles
查找依赖项。
于 2013-04-16T11:08:01.310 回答
4
我前段时间在一段讨厌的代码中使用了它:
在您加载程序集的地方,注册 resolve 事件:
AppDomain.CurrentDomain.AssemblyResolve += Assemblies_AssemblyResolve;
Assembly.LoadFile("<path to your assembly>");
AppDomain.CurrentDomain.AssemblyResolve -= Assemblies_AssemblyResolve;
为每个引用的 dll 调用解析事件处理程序。在这里我尝试加载程序集。
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;
}
希望,这有帮助!
于 2013-04-16T11:18:04.443 回答
1
我找到了答案。如果我们想找到卸载程序集的引用程序集,我们可以通过以下方式找到。
Assembly _Assembly = Assembly.ReflectionOnlyLoadFrom(@"H:\Account.dll");
AssemblyName[] _AN = _Assembly.GetReferencedAssemblies();
于 2013-04-17T06:54:29.670 回答