假设我有一个带有以下代码的ILAsm库:
.assembly extern mscorlib{}
.assembly TestMe{}
.module TestMe.dll
.method public static void PrintMe() cil managed
{
ldstr "I'm alive!"
call void [mscorlib]System.Console::WriteLine(string)
ret
}
如何从C#代码调用全局PrintMe()函数?
答案 0 :(得分:3)
你可以通过反思......但不是以任何真正有用的方式:
var module = Assembly.LoadFile("path_to_dll.dll").GetModules()[0];
// the first and only module in your assembly
var method = module.GetMethod("PrintMe");
method.Invoke(null,
BindingFlags.Public | BindingFlags.Static,
null,
null,
CultureInfo.CurrentCulture); // Prints "I'm alive!" to console.
答案 1 :(得分:1)
据我所知,你不能。 C#只“知道”在类型中声明的方法 - 而不是在顶层。将您的方法移动到一个类型。