Mr Balanikas
Mr Balanikas

Reputation: 1681

Top-level program without executable code does not compile

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

Answers (1)

xanatos
xanatos

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

Related Questions