Belgelenmemiş, ancak .NET 4.5'teki optimizasyonlardan birine benziyor. Yansıtma türü bilgi önbelleğini hazırlamak için kullanılır, bu da ortak çerçeve türlerinde sonraki yansıma kodunun daha hızlı çalışmasını sağlar. Bu konuda System.Reflection.Assembly.cs, RuntimeAssembly.Flags özelliğinde Reference Source içinde bir yorum var:
// 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;
}
Başka ipuçları olmadan bir "kutsanmış API" ne anlama gelebilir. Bağlamdan anlaşılacağı gibi, bunun yalnızca çerçevenin kendisindeki türler üzerinde çalışacağı açıktır. Türlere ve yöntemlere uygulanan özniteliği kontrol eden bir yerde ek kod bulunmalıdır. Nerede olduğunu bilmiyorum, ama önbellek bir çekim için tüm .NET türleri bir görünüm olması gerekir göz önüne alındığında, ben sadece Ngen.exe düşünebilirsiniz.