我有一个针对net5的控制台应用程序,该应用程序中唯一的代码行是这个
System.Console.WriteLine();
它按预期工作,但当我删除那一行时,我得到一个编译错误,指出缺少一个入口点。这是错误:https://learn.microsoft.com/en-us/dotnet/csharp/misc/cs5001
我的问题是为什么编译器的行为会有所不同。为什么在这种情况下,编译器会将顶级程序与非顶级程序区别对待,因为在非顶级程序中会存在静态"Main"方法?
来自msdn
语义
如果程序的任何编译单元中存在任何顶级语句,其含义就好像它们被组合在全局命名空间中程序类的Main方法的块体中一样,如下所示:
因此,您可以看到,您的语句是在隐式Main()
方法中编译的。但是要有这个Main()
方法,您必须至少有一个顶级语句。只有当存在顶级语句时,才会创建此隐式语句。您建议的替代方案将导致始终生成隐式Main()
。
您看到的错误显然与此有关:在没有任何代码行的情况下,不会生成任何隐式Main()
方法,因此会返回一个入口点丢失错误。