6

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?

0

1 Answer 1

11

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.

Not the answer you're looking for? Browse other questions tagged or ask your own question.