Він недокументований, але схоже на одну з оптимізацій в .NET 4.5. Здається, він використовується для просування кешу інформації інформації про відображення, завдяки чому наступний код відображення для загальних типів фреймворку працює швидше. Про це є коментар у Довідковому джерелі для System.Reflection.Assembly.cs, RuntimeAssembly.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;
}
Без додаткових підказок, що може означати "благословенний API". Хоча з контексту видно, що це буде працювати лише на типи в рамках. Десь повинен бути додатковий код, який перевіряє атрибут, застосований до типів та методів. Не маю уявлення, де це знаходиться, але враховуючи, що для того, щоб зняти кешування, потрібно мати перегляд усіх типів .NET, я можу подумати лише про Ngen.exe.