没有可执行代码的顶级程序无法编译

Top-level program without executable code does not compile

我有一个针对 net5 的控制台应用程序,应用程序中唯一的代码行是这样的

System.Console.WriteLine();

它按预期工作,但是当我删除该行时,出现编译错误,指出缺少入口点。这是错误:https://docs.microsoft.com/en-us/dotnet/csharp/misc/cs5001

我的问题是为什么编译器行为不同。在这种情况下,为什么编译器会区别对待顶级程序和非顶级程序,后者会出现静态 'Main' 方法?

来自msdn

Semantics
If any top-level statements are present in any compilation unit of the program, the meaning is as if they were combined in the block body of a Main method of a Program class in the global namespace, as follows:

所以你看,你的语句是在隐式 Main() 方法中编译的。但是要有这个Main()方法,你必须至少有一个顶级语句。仅当存在顶级语句时才创建此隐式语句。您建议的替代方案会导致始终生成隐式 Main()

您看到的错误显然与此有关:没有任何代码行,没有生成隐式 Main() 方法,因此 缺少入口点 错误返回。