为什么 CLR 不允许在加载此程序集时调用同一程序集函数?



我从《CLR via C#》第4版587页看到了这一点,这是一句话

使用ReflectionOnlyLoadFrom或ReflectionOnly加载程序集时,CLR禁止执行程序集中的任何代码;在加载了这两种方法的程序集中执行代码的任何尝试都会导致CLR引发InvalidOperationException。

我想是为了线程安全??请给我一些关于这个问题的建议,谢谢。

A"仅反射加载";旨在允许您检查程序集元数据,而不必实际将程序集加载到进程中执行。

您不能从";"仅反射加载";因为程序集实际上并没有加载到可执行进程中。

进一步阅读
如何在将组件包含在应用程序中之前检查带有反射的组件

不,这与线程安全无关。";仅反射负载";以便您可以在不需要(或不希望(执行任何操作的情况下检查程序集的内容。因此,通过使用这个API;我肯定不想在这里做任何事情";。因此,我们可以很合理地预测,事实上,我们不能管理事情。

除了避免激活程序集所需的许多机械部件外,这还避免了模块初始化程序的一些(尽管不太可能(攻击向量(是的,这是一件事——甚至有一个在C#中添加支持的计划(在你认为你所做的只是查看程序集的形状时运行任意代码。

如果你想执行一些事情:不要简单地使用仅反射加载。

最新更新