![](/img/trans.png)
[英]Reference assemblies should not be loaded for execution. They can only be loaded in the Reflection-only loader context
[英]What are execution context and reflection-only context in .Net?
.NET程序集包含许多内容。 通常,它们包含类型(类等)和元数据(有关这些类型的信息,等等)。
您可以使用反射访问元数据。
如果您只对元数据感兴趣,而不对实际使用程序集中的类型感兴趣,则可以在仅反射的上下文中加载该程序集。 这使您可以加载和检查程序集元数据,但实际上不能实例化该程序集的类型。
关于这一切的一个很好的资源是Jeffrey Richter通过C#编写的CLR 。 有关一些简短信息,请参见《 MSDN博客:仅反射程序集加载》 。
该框架文档也是一个不错的阅读:公共语言运行时中的汇编->汇编内容 :
通常,静态程序集可以包含四个元素:
程序集清单,其中包含程序集元数据。
键入元数据。
实现类型的Microsoft中间语言(MSIL)代码。
一组资源。
仅反射加载上下文使您可以检查为其他平台或其他版本的.NET Framework编译的程序集。 加载到此上下文中的代码只能进行检查; 它无法执行。 这意味着无法创建对象,因为无法执行构造函数。 由于无法执行代码,因此不会自动加载依赖项。 如果需要检查它们,则必须自己加载它们。
因此,仅反射上下文实际上不是一个不同的进程,一个线程或其他任何东西,而只是一种加载程序集而不在其中加载代码或依赖项的方式。 代表已加载程序集的Assembly
类实例将使用其Assembly.ReflectionOnly
属性进行标记。
它只是加载类型元数据 ,因此您可以检查程序集中的类型。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.