MetadataLoadContext.CoreAssembly 属性
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
获取或设置表示“系统程序集”的程序集,该程序集包含 Int32 等已知类型。
public:
property System::Reflection::Assembly ^ CoreAssembly { System::Reflection::Assembly ^ 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构造函数的参数传递给 coreAssemblyName
MetadataAssemblyResolver.Resolve 方法来确定 。
如果在 的MetadataLoadContext构造函数中未指定任何coreAssemblyName
参数,则使用默认值,包括“mscorlib”、“System.Runtime”和“netstandard”。
指定的核心程序集不需要直接包含核心类型。 它可以键入将它们转发到其他程序集。 因此,完全允许将 mscorlib 外观用作指定的核心程序集。
请注意, System.Runtime 不是理想的核心程序集,因为它排除了一些与互操作相关的伪自定义属性类型,例如 DllImportAttribute。 但是,如果你对这些属性不感兴趣,则可以使用它。 如果核心程序集不包含必要的类型,则 CustomAttributes API 将跳过这些属性。
在必要之前不会加载核心程序集。 以下 API 不会触发对核心程序集的搜索:
- MetadataLoadContext.LoadFromStream
- MetadataLoadContext.LoadFromAssemblyPath
- MetadataLoadContext.LoadFromByteArray
- Assembly.GetName
- Assembly.FullName
- Assembly.GetReferencedAssemblies
- Assembly.GetTypes
- Assembly.DefinedTypes
- Assembly.GetExportedTypes
- Assembly.GetForwardedTypes
- Assembly.GetType(String, Boolean, Boolean)
- Type.Name
- Type.FullName
- Type.AssemblyQualifiedName
如果找不到核心程序集或核心程序集缺少类型,这将影响 的行为 MetadataLoadContext ,如下所示:
需要分析签名或类型规范并作为 Type 对象返回结果的 API 将引发异常。 例如:
需要将类型与已知核心类型进行比较的 API 不会引发异常,比较的计算结果
false
为 。 例如,如果未指定核心程序集,IsPrimitive则会对所有内容(甚至名为 Int32的类型)返回false
。 同样, Type.GetTypeCode 将返回 Object 所有内容。如果元数据实体将该标志设置为伪自定义属性,并且核心程序集不包含伪自定义属性类型、必需的构造函数或构造函数的任何参数类型, MetadataLoadContext 则 不会引发 。 它将从返回的属性列表中省略伪自定义属性。