3

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

4

2 回答 2

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.
于 2013-10-05T11:31:46.523 回答
1

据我所知,你不能。C# 只“知道”在类型中声明的方法——而不是在顶层。将您的方法移动到类型中。

于 2013-10-05T11:02:34.330 回答