没有可执行代码的顶层程序不编译

Bal*_*kas 3 c# .net-5 c#-9.0

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

System.Console.WriteLine();
Run Code Online (Sandbox Code Playgroud)

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

我的问题是为什么编译器的行为会有所不同。在这种情况下,为什么编译器将顶级程序与非顶级程序不同地对待,其中将出现静态“Main”方法?

xan*_*tos 9

来自msdn

语义
如果任何顶级语句出现在程序的任何编译单元中,其含义就好像它们组合在全局命名空间中 Program 类的 Main 方法的块体中,如下所示:

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

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