Reputation: 1681
I have a console app targeting net5 and the only line of code in the app is this
System.Console.WriteLine();
It works as expected, but when I remove that line I get a compilation error pointing out that an entry point is missing. This is the error: https://learn.microsoft.com/en-us/dotnet/csharp/misc/cs5001
My question is why there is a difference in compiler behaviour. Why does the compiler, in this case, treat a top-level program differently from a non-top-level program, where a static 'Main' method would be present?
Upvotes: 6
Views: 11350
Reputation: 111870
From 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:
So you see, your statements were compiled inside an implicit Main()
method. But to have this Main()
method, you must have at least one top-level statement. This implicit statement is created only if there are top-level statement. The alternative you suggest would cause an implicit Main()
to always be generated.
The error you see is clearly connected to this: without any line of code, no implicit Main()
method is generated, so an an entry point is missing error is returned.
Upvotes: 11