从C#代码调用ILAsm全局函数

时间:2013-10-05 10:49:34

标签: c# .net clr ilasm

假设我有一个带有以下代码的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()函数?

2 个答案:

答案 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#只“知道”在类型中声明的方法 - 而不是在顶层。将您的方法移动到一个类型。