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



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

System.Console.WriteLine();

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

我的问题是为什么编译器的行为会有所不同。为什么在这种情况下,编译器会将顶级程序与非顶级程序区别对待,因为在非顶级程序中会存在静态"Main"方法?

来自msdn

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

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

您看到的错误显然与此有关:在没有任何代码行的情况下,不会生成任何隐式Main()方法,因此会返回一个入口点丢失错误。

最新更新