C#动态加载Dll而没有找到其依赖项

时间:2019-07-13 17:14:17

标签: c# reflection

我读了article,但这对我没有帮助。

我的目标是找到具有自定义属性的类。 由于我不需要任何实例或使用代码,有没有一种方法可以加载DLL文件并在代码中搜索我想要的内容,而无需解决依赖关系问题?查找代码。

1 个答案:

答案 0 :(得分:0)

如果要获取所有应用程序域程序集类型,可以通过捕获ReflectionTypeLoadException来避免该问题:

public static class AssemblyExtension
{
    public static IEnumerable<Type> GetLoadableTypes(this Assembly assembly)
    {
        if (assembly == null) throw new ArgumentNullException(nameof(assembly));
        try
        {
            return assembly.GetTypes();
        }
        catch (ReflectionTypeLoadException e)
        {
            return e.Types.Where(t => t != null);
        }
    }
}

您可以像这样使用它:

var types = (from domainAssembly in AppDomain.CurrentDomain.GetAssemblies().Where(x => !x.IsDynamic)
             from assemblyType in domainAssembly.GetLoadableTypes()
             select assemblyType);

如果您以程序集为目标但要加载而不加载其依赖项,请使用重载之一: 如此处记录:How to: Load Assemblies into the Reflection-Only Context

Assembly.ReflectionOnlyLoad(/*your appropriate parameter assembly name or something else*/);