Поэтому я пытаюсь вызвать метод из внешней библиотеки DLL с помощью динамического метода, используя ilgenerator.DynamicMethod - время выполнения общего языка обнаруживает недопустимую программу
delegate void Write(string text);
static void Main(string[] args)
{
byte[] bytes = File.ReadAllBytes(@"externmethod.dll");
var assembly = Assembly.Load(bytes);
var method = assembly.GetTypes()[0].GetMethod("Write");
var dynamicMethod = new DynamicMethod("Write", typeof(void), new Type[] { typeof(string) });
var ilGenerator = dynamicMethod.GetILGenerator();
ilGenerator.EmitCall(OpCodes.Call, method, null);
var delegateVoid = dynamicMethod.CreateDelegate(typeof(Write)) as Write;
delegateVoid("test");
Console.ReadLine();
}
И код DLL:
using System;
class program
{
public static void Write(string text)
{
Console.WriteLine(text);
}
}
Но я получаю эту странную ошибку:
An unhandled exception of type 'System.InvalidProgramException' occurred in test.exe
Additional information: Common Language Runtime detected an invalid program.
И я не имею никакого понятия, что им делать неправильно ??
Я попробовал ваш код, но это дает мне другую ошибку; –
Errormessage: Дополнительная информация: Попытка метода «DynamicClass.Write (System.String)» для доступа к программе «program.Write (System.String)» не удалась. –
@JustusBosschieter Это 'MethodAccessException'. Сделайте 'Program' class' public'. –