如何加载DLL文件以确定其依赖的程序集名称?

时间:2013-04-16 10:58:41

标签: c# reflection

在运行时我想加载程序集并需要查找其依赖程序集的名称,以便我可以确定执行给定DLL文件所需的程序集。

3 个答案:

答案 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();