Il est sans-papiers, mais cela ressemble à de la, des optimisations .NET 4.5. Il semble être utilisé pour amorcer la réflexion des informations de type de cache, de décisions ultérieures code de réflexion sur le cadre commun des types courir plus vite. Il y a un commentaire à ce sujet dans la Source de Référence pour le Système.De la réflexion.De l'assemblée.cs, RuntimeAssembly.Propriété Flags:
// Each blessed API will be annotated with a "__DynamicallyInvokableAttribute".
// This "__DynamicallyInvokableAttribute" is a type defined in its own assembly.
// So the ctor is always a MethodDef and the type a TypeDef.
// We cache this ctor MethodDef token for faster custom attribute lookup.
// If this attribute type doesn't exist in the assembly, it means the assembly
// doesn't contain any blessed APIs.
Type invocableAttribute = GetType("__DynamicallyInvokableAttribute", false);
if (invocableAttribute != null)
{
Contract.Assert(((MetadataToken)invocableAttribute.MetadataToken).IsTypeDef);
ConstructorInfo ctor = invocableAttribute.GetConstructor(Type.EmptyTypes);
Contract.Assert(ctor != null);
int token = ctor.MetadataToken;
Contract.Assert(((MetadataToken)token).IsMethodDef);
flags |= (ASSEMBLY_FLAGS)token & ASSEMBLY_FLAGS.ASSEMBLY_FLAGS_TOKEN_MASK;
}
Sans autres indices de ce qu'un "béni API" peut signifier. Bien qu'il est clair d'après le contexte que cela ne fonctionne que sur des types dans le cadre lui-même. Il devrait y avoir un code supplémentaire quelque part qui vérifie l'attribut appliqué à des types et des méthodes. Aucune idée d'où c'est situé, mais étant donné qu'il aurait besoin d'avoir une vue de tous .Types de filets d'avoir un coup de feu à la mise en cache, je ne peux que penser à Ngen.exe.