Этот код создает сборку. В сборке есть единственный статический метод под названием «Test2», который выводит «Вау!» в командную строку. Этот метод не находится в классе — это «глобальный метод» в модуле сборок.
var fileName = "output_name.dll";
var assemblyName = "MyAssembly";
var assembly = AppDomain.CurrentDomain.DefineDynamicAssembly(new AssemblyName(assemblyName), AssemblyBuilderAccess.Save);
var module = assembly.DefineDynamicModule(assemblyName, fileName);
var testMethod2 = module.DefineGlobalMethod("Test2", MethodAttributes.Public | MethodAttributes.Static, typeof(void), null);
var generator2 = testMethod2.GetILGenerator();
generator2.Emit(OpCodes.Ldstr, "Wow!");
generator2.EmitCall(OpCodes.Call, typeof(Console).GetMethod("WriteLine", new Type[] { typeof(string) }), null);
generator2.Emit(OpCodes.Ret);
module.CreateGlobalFunctions();
assembly.Save(fileName);
Теперь, когда у меня есть метод, я хотел бы сослаться на сборку из C# и вызвать метод. Но поскольку метод не находится в классе или пространстве имен, я не знаю, как это сделать.
Есть ли в C# способ вызова таких глобальных методов без использования отражения?