- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我试图了解 Assembly.Load 和 Assembly.ReflectionOnlyLoad 之间的区别。
在下面的代码中,我试图在给定程序集中查找从给定接口(interface)继承的所有对象:
var myTypes = new List<Type>();
var assembly = Assembly.Load("MyProject.Components");
foreach (var type in assembly.GetTypes())
{
if (type.GetInterfaces().Contains(typeof(ISuperInterface)))
{
myTypes.Add(type);
}
}
这段代码对我来说工作正常,但我正在研究其他可能更好的替代方案并遇到 Assembly.ReflectionOnlyLoad() 方法。
我假设因为我没有加载或执行任何对象,基本上只是查询它们的定义,所以我可以使用 ReflectionOnlyLoad 来稍微提高性能......
但事实证明,当我将 Assembly.Load 更改为 Assembly.ReflectionOnlyLoad 时,我在调用 assembly.GetTypes() 时收到以下错误:
System.Reflection.ReflectionTypeLoadException:
Unable to load one or more of the requested types. Retrieve the LoaderExceptions property for more information.
我假设上面的代码只是在进行反射和“查看”库……但这是海森堡不确定性原理的某种实例吗?查看库和其中的对象实际上是在尝试实例化他们以某种方式?
谢谢,最大
最佳答案
根据 Jon 的回复,了解 LoaderExceptions
中的内容会很有帮助。代替这些信息,我想我可以冒险猜测一下。来自 MSDN :
If the assembly has dependencies, the ReflectionOnlyLoad method does not load them. If you need to examine them, you must load them yourself.
您需要将处理程序附加到 AppDomain.ReflectionOnlyAssemblyResolve
以帮助 CLR 加载您正在加载的程序集的任何依赖项。你做到了吗?
关于C# Assembly.Load 与 Assembly.ReflectionOnlyLoad,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/305835/
如果我通过 Assembly.Load 加载程序集,我可以迭代其类型,通过 typef(...).IsAssignableFrom 查找特定类型,并通过 GetField 从类型中获取字段信息。 当我
我正在开发一个简单的类浏览器对话框,允许用户打开一个程序集并从中选择一个静态方法。但是,在某些情况下程序集的依赖项会丢失。 因为我只需要方法名而不是它的完整原型(prototype),有什么方法可以绕
我的目标: 我们允许将我们的产品与第三方组件(库)集成,这些组件由于许可而未作为我们产品的一部分安装。目前,我们只想加载与第三方组件相关的功能,前提是这些组件安装在客户端的机器上。 当前解决方案: 我
我正在尝试通过连接到 AppDomain.AssemblyResolve 和 AppDomain.ReflectionOnlyAssemblyResolve 事件来加载一些模块。当我让前者工作时,我在
我试图了解 Assembly.Load 和 Assembly.ReflectionOnlyLoad 之间的区别。 在下面的代码中,我试图在给定程序集中查找从给定接口(interface)继承的所有对象
Assembly.ReflectionOnlyLoad 已在 .NET 6 中弃用。是否有替代方案? 我想要实现的是在应用程序路径中找到具有特定自定义程序集属性的程序集并加载它们。我可以搜索所有程序集
我是一名优秀的程序员,十分优秀!