我正试图理解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属性以获取更多信息。