繁体   English   中英

.Net中的执行上下文和仅反射上下文是什么?

[英]What are execution context and reflection-only context in .Net?

我很难理解.Net中的概念执行上下文仅反射上下文 据我了解,这是加载程序集的两种不同方式,但是我无法明确定义它们。

关于执行上下文,我能够找到msdn上ExecutionContext的文档以及有关仅反射上下文的信息,只是如何将程序集加载到其中。

有人可以提供这两个概念的描述吗?

.NET程序集包含许多内容。 通常,它们包含类型(类等)和元数据(有关这些类型的信息,等等)。

您可以使用反射访问元数据。

如果您对元数据感兴趣,而不对实际使用程序集中的类型感兴趣,则可以在仅反射的上下文中加载该程序集。 这使您可以加载和检查程序集元数据,但实际上不能实例化该程序集的类型。

关于这一切的一个很好的资源是Jeffrey Richter通过C#编写的CLR 有关一些简短信息,请参见《 MSDN博客:仅反射程序集加载》

该框架文档也是一个不错的阅读:公共语言运行时中的汇编->汇编内容

通常,静态程序集可以包含四个元素:

  • 程序集清单,其中包含程序集元数据。

  • 键入元数据。

  • 实现类型的Microsoft中间语言(MSIL)代码。

  • 一组资源。

以及如何:将程序集加载到仅反射的上下文中

仅反射加载上下文使您可以检查为其他平台或其他版本的.NET Framework编译的程序集。 加载到此上下文中的代码只能进行检查; 它无法执行。 这意味着无法创建对象,因为无法执行构造函数。 由于无法执行代码,因此不会自动加载依赖项。 如果需要检查它们,则必须自己加载它们。

因此,仅反射上下文实际上不是一个不同的进程,一个线程或其他任何东西,而只是一种加载程序集而不在其中加载代码或依赖项的方式。 代表已加载程序集的Assembly类实例将使用其Assembly.ReflectionOnly属性进行标记。

它只是加载类型元数据 ,因此您可以检查程序集中的类型。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM