Доступные сигнатуры метода Main и что выбрать
Опираясь на исходный код метода HasEntryPointSignature, который используется компилятором для нахождения точки входа в наше приложение, можно смело заключить, что:
- сигнатура метода должна определять возвращаемое значение как
int
илиvoid
; - сигнатура метода должна определять входной аргумент как
string[]
или его отсутствие;
В противном случае Compiler Error CS5001 нарочито сообщит нам о допущенной ошибке:
Main must be declared as static and it must return void or int, and it must have either no parameters or else one parameter of type string[].
Начиная с C# 7.1 так же доступно использование async
keyword и возвращаемые значения типов Task
и Task<int>
. Для успешной компиляции необходимо используя Visual Studio 15.3 редакции в Project properties > Build > Advanced > Language version
выставить значение C# 7.1
:
Выбор необходимой сигнатуры обуславливается необходимостью возвращать результат выполнения нашего приложения и конфигурации посредством передаваемых аргументов.
Однако, наличие более одного класса содержащего метод Main
не воспрещается и определение точки входа может осуществляться на этапе компиляции с использованием аргумента /main.