MetadataLoadContext.CoreAssembly 属性
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
获取或设置表示“系统程序集”的程序集,该程序集包含 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.Resolve的参数传递给coreAssemblyName
MetadataAssemblyResolver方法来确定。
coreAssemblyName
如果未在构造函数MetadataLoadContext中指定任何参数,则使用默认值,包括“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 :
需要分析签名或 typespecs 并返回结果的 API,因为 Type 对象将引发异常。 例如:
需要将类型与已知核心类型进行比较的 API 不会引发异常,比较结果为
false
a0/>。 例如,如果未指定核心程序集, IsPrimitive 将返回false
所有内容,甚至命名 Int32的类型。 同样, Type.GetTypeCode 将返回 Object 所有内容。如果元数据实体将图面的标志设置为伪自定义属性,并且核心程序集不包含伪自定义属性类型、必要的构造函数或构造函数的任何参数类型, MetadataLoadContext 则不会引发。 它将从返回的属性列表中省略伪自定义属性。