gpt4 book ai didi

C# Assembly.Load 与 Assembly.ReflectionOnlyLoad

转载 作者:IT王子 更新时间:2023-10-29 03:52:41 25 4
gpt4 key购买 nike

我试图了解 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com