我有一个程序,它根据给定目录中所有找到的dll动态加载和添加元素。 (简而言之:Assembly.LoadFrom(" ... xyz.dll")。GetTypes()。其中(t => typeof(MyBaseClass).isAssignableFrom(t).Select(t => Activator) .CreateInstance(T)))
现在我的一些Dll(包括从MyBaseClass派生的多个类)需要额外引用的Dll,这些Dll并不总是包含在内(就像从其他程序使用API-Dll时)。这些通常由我的AppDomain.CurrentDomain.AssemblyResolve事件处理,我根据某些安装路径动态加载那些丢失的API-DLL)
因此,当使用assembly.getTypes()时,我得到一个" ReflectionTypeLoadException ex"使用子类型" FileNotFoundException"作为ex.LoaderExceptions的一部分。
澄清:这个例外是可以的,因为一些API-Dll是其他程序的一部分;因此,如果您在没有安装这些程序的情况下在另一台PC上运行我的程序,当然缺少引用的API-DLL(并且不允许将它们添加到我的程序中)。
我现在的问题是:如何过滤我列出的类型(来自assembly.GetTypes()或ReflectionTypeLoadException ex.Types)以删除那些实际使用其中一个缺少的API.DLL的类(或使用另一个使用的类)其中之一等)? - assembly.GetReferencedAsseblies()仅列出顶级程序集的所有引用程序集。但如上所述,这可以包含基于MyBaseClass的多重类,例如,只有一个实际上使用了缺少的API-DLL(由"使用......"在开始时定义)
作为补充:我可以自动将.CurrentDomain.AssemblyResolve事件拆分为他们认为的顶级程序集吗?就像在我的每个DLL中都有一个(静态?)解析方法,它处理缺少的子程序集而不是我的MainForm中的所有方法?
提前谢谢!
祝你好运, 罗宾