Abstract
The C# language standard requires that the Main() method always be the entry point of the program and triggers the program execution, but the class it is in is not specified by the standard. This article will elaborate a little more on this fact and will explain the possibility and issues of having multiple Main() methods, if at all possible, technically.
Normal Program structure
The code below shows a C# Console program code with only one Main() method.
The C# language standard requires that the Main() method always be the entry point of the program and triggers the program execution, but the class it is in is not specified by the standard. This article will elaborate a little more on this fact and will explain the possibility and issues of having multiple Main() methods, if at all possible, technically.
Normal Program structure
The code below shows a C# Console program code with only one Main() method.
Execute
the application.
The program executes and successfully shows the message in the
Now let's add a second Main() into the program.
To do so there are two ways:
To do so there are two ways:
- Add
a Program2 class to the same Program.cs file
- Add
a separate C# class and define a Main() method in that.
Here for demo purposes I will use the #1 approach and a “class
Program2” will be added to the same physical Program.cs file.
Build and Observe the behavior
Now it's time to build the code and as soon as you build (Ctrl+Shift+B) two errors will be shown in the Error List window.
Now it's time to build the code and as soon as you build (Ctrl+Shift+B) two errors will be shown in the Error List window.
The Error description is as follows
Notice the Yellow highlighted text.
Error 1 Program 'c:\Users\vva597\Documents\Visual Studio 2013\Projects\ConsoleApplication\ConsoleApplication\obj\Debug\ConsoleApplication.exe' has more than one entry point defined: 'ConsoleApplication.Program.Main(string[])'. Compile with /main to specify the type that contains the entry point. c:\users\vva597\documents\visual studio 2013\Projects\ConsoleApplication\ConsoleApplication\Program.cs 7 21 ConsoleApplication
Notice the Yellow highlighted text.
Error 1 Program 'c:\Users\vva597\Documents\Visual Studio 2013\Projects\ConsoleApplication\ConsoleApplication\obj\Debug\ConsoleApplication.exe' has more than one entry point defined: 'ConsoleApplication.Program.Main(string[])'. Compile with /main to specify the type that contains the entry point. c:\users\vva597\documents\visual studio 2013\Projects\ConsoleApplication\ConsoleApplication\Program.cs 7 21 ConsoleApplication
The Issue
Since we have added another Main() program the compiler is now confused about which one to use and it will now rely on the developer's decision to assign one specific Main() to the project for executon.
Go to Project -> Properties -> Aplication Tab -> Startup object.
You will see that both of the Main() method holders (classes) are listed there as shown in the image below.
Since we have added another Main() program the compiler is now confused about which one to use and it will now rely on the developer's decision to assign one specific Main() to the project for executon.
Go to Project -> Properties -> Aplication Tab -> Startup object.
You will see that both of the Main() method holders (classes) are listed there as shown in the image below.
Set a Startup object and Re-run
As shown in the previous image, select one of the Main() methods and execute the program. You shall see the two separate messages coming from the two different Main() methods as expected.
As shown in the previous image, select one of the Main() methods and execute the program. You shall see the two separate messages coming from the two different Main() methods as expected.
This comment has been removed by the author.
ReplyDelete