Все примеры, с сохранением в файл, кому это нужно.
Как HelloWorld запустить, без вызова другого exe файла.
Да и даже сохранить не получается, не находит основной Program класс, как такое может быть если он генирится в этом классе.
И с MethodBuilder о же самое было, если в функцию добавить поиск метода из этой сборки, то ошибка, а как исправить, не где не найти, часы листаю тонны ссылок, найти не могу, метода типа assembly. Import() , или .Using() или AddLink или что-то.
Не то что бы этот вопрос нужен ответ, но почему вот тут ошибка с DynamicBuilder
Точнее как исправить
public class DynamicMethodExample
{
public static void Print(int a)
{
Console.WriteLine($"Number {a}");
}
public static void Main()
{
AssemblyName assemblyName = new AssemblyName("DynamicAssembly");
System.Reflection.Emit.AssemblyBuilder assemblyBuilder = System.Reflection.Emit.AssemblyBuilder.DefineDynamicAssembly(assemblyName, System.Reflection.Emit.AssemblyBuilderAccess.Run);
var moduleBuilder = assemblyBuilder.DefineDynamicModule("DynamicModule");
var typeBuilder = moduleBuilder.DefineType("DynamicType", System.Reflection.TypeAttributes.Public);
var methodBuilder = typeBuilder.DefineMethod("MyDynamicMethod", MethodAttributes.Public | MethodAttributes.Static, typeof(void), null);
var methodBuilder2 = new DynamicMethod("_", null, Type.EmptyTypes);
var ilGenerator = methodBuilder.GetILGenerator();
// Генерируем код метода
ilGenerator.Emit(System.Reflection.Emit.OpCodes.Ldc_I4, 42); // Загружаем число 42 на стек
ilGenerator.Emit(System.Reflection.Emit.OpCodes.Call,
typeof(DynamicMethodExample).GetMethod("Print",BindingFlags.Static|BindingFlags.Public, new Type[] { typeof(int) }));
ilGenerator.Emit(System.Reflection.Emit.OpCodes.Ret); // Возвращаем значение
Type dynamicType = typeBuilder.CreateType();
object instance = Activator.CreateInstance(dynamicType);
MethodInfo dynamicMethod = dynamicType.GetMethod("MyDynamicMethod");
dynamicMethod.Invoke(instance, null);
}
}