MetadataLoadContext.CoreAssembly 属性

定义

获取或设置表示“系统程序集”的程序集,该程序集包含 Int32 等已知类型。

public:
 property System::Reflection::Assembly ^ CoreAssembly { System::Reflection::Assembly ^ get(); };
public System.Reflection.Assembly CoreAssembly { get; }
public System.Reflection.Assembly? CoreAssembly { get; }
member this.CoreAssembly : System.Reflection.Assembly
Public ReadOnly Property CoreAssembly As Assembly

属性值

Assembly

一个 Assembly 实例。

注解

核心程序集的处理方式与其他程序集不同,因为对这些已知类型的引用不包括程序集引用,与普通类型不同。

通常,此程序集名为“mscorlib”或“netstandard”。 如果找不到核心程序集,该值将是 null,而许多其他反射方法(包括分析方法签名的方法)将引发异常。

CoreAssembly通过将传递给构造函数MetadataAssemblyResolver.Resolve的参数传递给coreAssemblyNameMetadataAssemblyResolver方法来确定。

coreAssemblyName如果未在构造函数MetadataLoadContext中指定任何参数,则使用默认值,包括“mscorlib”、“System.Runtime”和“netstandard”。

指定的核心程序集不需要直接包含核心类型。 它可以键入转发到其他程序集。 因此,使用 mscorlib 外墙作为指定的核心程序集是完全允许的。

请注意, System.Runtime 这不是理想的核心程序集,因为它排除了某些与互操作相关的伪自定义属性类型,例如 DllImportAttribute。 但是,如果你对这些属性没有兴趣,它可以提供服务。 如果核心程序集不包含必要的类型,CustomAttributes API 将跳过这些属性。

在必要之前,不会加载核心程序集。 以下 API 不会触发核心程序集的搜索:

如果找不到核心程序集,或者如果核心程序集缺少类型,这将影响如下所示的行为 MetadataLoadContext

  • 需要分析签名或 typespecs 并返回结果的 API,因为 Type 对象将引发异常。 例如:

  • 需要将类型与已知核心类型进行比较的 API 不会引发异常,比较结果为 false a0/>。 例如,如果未指定核心程序集, IsPrimitive 将返回 false 所有内容,甚至命名 Int32的类型。 同样, Type.GetTypeCode 将返回 Object 所有内容。

  • 如果元数据实体将图面的标志设置为伪自定义属性,并且核心程序集不包含伪自定义属性类型、必要的构造函数或构造函数的任何参数类型, MetadataLoadContext 则不会引发。 它将从返回的属性列表中省略伪自定义属性。

适用于