我试图了解 Assembly.Load 和 Assembly.ReflectionOnlyLoad 之间的区别。
在下面的代码中,我试图查找给定程序集中从给定接口继承的所有对象:
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:
无法加载一种或多种请求的类型。检索 LoaderExceptions 属性以获取更多信息。
我假设上面的代码只是在做反射和“查看”库......但这是否是海森堡不确定性原则的某种实例,即查看库和其中的对象实际上是试图在某些情况下实例化它们方式?
谢谢,马克斯