无法通过 .NET 5 顶级调用使用反射找到 Main 方法

Dmi*_*ruk 4 .net c#-9.0

var pt = Type.GetType("<Program>$");
var m = pt.GetMethod("<Main>$", BindingFlags.Static);
// m is null
Run Code Online (Sandbox Code Playgroud)

好的,我去Program上课了,这很好用。但是当我去抓取Main方法时,系统找不到它,它也不在pt.GetMembers()。这是怎么回事?

Jon*_*eet 5

您只需要指定要查看非公开成员:

using System;
using System.Reflection;

var pt = Type.GetType("<Program>$");
var m = pt.GetMethod("<Main>$", BindingFlags.Static | BindingFlags.NonPublic);
Console.WriteLine(m); // Prints Void <Main>$(System.String[])
Run Code Online (Sandbox Code Playgroud)

同样使用GetMembers,您需要指定您想要的公共和非公共成员:

using System;
using System.Reflection;

var pt = Type.GetType("<Program>$");
var flags =
    BindingFlags.Public | BindingFlags.NonPublic |
    BindingFlags.Instance | BindingFlags.Static;
foreach (var member in pt.GetMembers(flags))
{
    Console.WriteLine(member);
}
Run Code Online (Sandbox Code Playgroud)