Share via


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 实例。

注解

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

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

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

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

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

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

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

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

  • 需要分析签名或类型规范并作为 Type 对象返回结果的 API 将引发异常。 例如:

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

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

适用于