MetadataLoadContext.CoreAssembly Proprietà
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
Ottiene o imposta l'assembly che denota "l'assembly di sistema" che contiene i tipi noti, come ad esempio 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
Valore della proprietà
Istanza di Assembly.
Commenti
L'assembly di base viene trattato in modo diverso da altri assembly perché i riferimenti a questi tipi noti non includono il riferimento all'assembly, a differenza dei tipi normali.
In genere, questo assembly è denominato "mscorlib" o "netstandard". Se non è possibile trovare l'assembly di base, il valore sarà null
e molti altri metodi di reflection, inclusi quelli che analizzano le firme del metodo, genereranno un'eccezione.
Viene CoreAssembly
determinato passando il coreAssemblyName
parametro passato al MetadataAssemblyResolver costruttore al MetadataAssemblyResolver.Resolve metodo .
Se non coreAssemblyName
è stato specificato alcun argomento nel costruttore di MetadataLoadContext, vengono usati i valori predefiniti, tra cui "mscorlib", "System.Runtime" e "netstandard".
L'assembly core designato non deve contenere direttamente i tipi di base. Può digitarli in altri assembly. Pertanto, è perfettamente consentito usare la facciata mscorlib come assembly di base designato.
Si noti che System.Runtime non è un assembly core ideale perché esclude alcuni dei tipi di attributi pseudo-personalizzati correlati all'interoperabilità, ad esempio DllImportAttribute. Tuttavia, può servire se non si ha alcun interesse per tali attributi. L'API CustomAttributes ignora tali attributi se l'assembly di base non include i tipi necessari.
L'assembly di base non viene caricato finché non è necessario. Le API seguenti non attivano la ricerca dell'assembly di base:
- 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 non è possibile trovare un assembly di base o se l'assembly di base manca di tipi, questo influisce sul comportamento del MetadataLoadContext componente come indicato di seguito:
API che devono analizzare firme o tipipecs e restituire i risultati come Type oggetti genereranno un'eccezione. Ad esempio:
Le API che devono confrontare i tipi a tipi di core noti non genereranno un'eccezione e il confronto valuterà
false
. Ad esempio, se non si specifica un assembly di base, verrà restituitofalse
per tutto, IsPrimitive anche i tipi denominati Int32. Analogamente, Type.GetTypeCode restituirà Object tutto.Se un'entità di metadati imposta i flag che escludono un attributo pseudo-personalizzato e l'assembly di base non contiene il tipo di attributo pseudo-personalizzato, il costruttore necessario o uno dei tipi di parametri del costruttore, l'oggetto MetadataLoadContext non genererà. Ometterà l'attributo pseudo-personalizzato dall'elenco di attributi restituiti.