MetadataLoadContext.CoreAssembly Propriedade
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
Obtém ou define o assembly que denota o "assembly de sistema" que hospeda os tipos conhecidos, tais como 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
Valor da propriedade
Uma instância Assembly.
Comentários
O assembly principal é tratado de forma diferente de outros assemblies porque as referências a esses tipos conhecidos não incluem a referência de assembly, ao contrário dos tipos normais.
Normalmente, esse assembly é chamado de "mscorlib" ou "netstandard". Se o assembly principal não puder ser encontrado, o valor será null
e muitos outros métodos de reflexão, incluindo aqueles que analisam assinaturas de método, gerarão uma exceção.
O CoreAssembly
é determinado passando o coreAssemblyName
parâmetro passado para o MetadataAssemblyResolver construtor para o MetadataAssemblyResolver.Resolve método .
Se nenhum coreAssemblyName
argumento tiver sido especificado no construtor de MetadataLoadContext, os valores padrão serão usados, incluindo "mscorlib", "System.Runtime" e "netstandard".
O assembly principal designado não precisa conter os tipos principais diretamente. Ele pode digitá-los para outros assemblies. Portanto, é perfeitamente permitido usar a fachada mscorlib como o assembly principal designado.
Observe que System.Runtime não é um assembly principal ideal porque exclui alguns dos tipos de atributo pseudo-personalizado relacionados à interoperabilidade, como DllImportAttribute. No entanto, ele poderá servir se você não tiver interesse nesses atributos. A API CustomAttributes ignorará esses atributos se o assembly principal não incluir os tipos necessários.
O assembly principal não é carregado até que seja necessário. As seguintes APIs não disparam a pesquisa para o assembly principal:
- 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
Se um assembly principal não puder ser encontrado ou se o assembly principal estiver faltando tipos, isso afetará o comportamento do da MetadataLoadContext seguinte maneira:
APIs que precisam analisar assinaturas ou tipospecs e retornar os resultados, pois Type os objetos gerarão uma exceção. Por exemplo:
APIs que precisam comparar tipos com tipos de núcleo conhecidos não gerarão uma exceção e a comparação será avaliada como
false
. Por exemplo, se você não especificar um assembly principal, IsPrimitive retornaráfalse
para tudo, até mesmo tipos chamados Int32. Da mesma forma, Type.GetTypeCode retornará Object para tudo.Se uma entidade de metadados definir sinalizadores que são exibidos como um atributo pseudo-personalizado e o assembly principal não contiver o tipo de atributo pseudo-personalizado, o construtor necessário ou qualquer um dos tipos de parâmetro do construtor, o MetadataLoadContext não será gerado. Ele omitirá o atributo pseudo-personalizado da lista de atributos retornados.