Спецификация языка C # и точка входа в ASP.NET MVC - PullRequest
0 голосов
/ 22 декабря 2019

Я читаю спецификацию языка C #;ECMA-334.

В разделе "8.1 Запуск приложения" указано, что имя точки входа должно быть Main. Но в приложении ASP.NET MVC точка входа будет в Global.asax с именем Application_Start.

Означает ли это, что приложение ASP.NET MVC является не приложением, а библиотекой классов?

Ответы [ 3 ]

3 голосов
/ 22 декабря 2019

Полагаю, вы говорите о "классическом" asp.net (как в не .net ядре). Это действительно библиотека классов, и она размещается в пулах приложений IIS (ну, в большинстве случаев). Настроив IIS, вы заметите, что он работает с точки зрения веб-приложений - что, по сути, является точкой входа, которую он обеспечивает для вас вместе со всей сантехникой.

У вас может быть самоподдерживающийся asp. net application но я считаю, что у вас должен быть хороший вариант использования, если вы идете по этому пути

0 голосов
/ 23 декабря 2019

Самый верный способ ответить на ваш вопрос - заглянуть в PE.

Второй раздел заголовков PE - это заголовок файла, он содержит информацию о нескольких битах, и один из них - Характеристики .

Поле Характеристики содержит флаги, которые указывают атрибуты объекта или файла изображения.

Один из флагов: 0x2000

Файл изображения представляет собой динамически подключаемую библиотеку (DLL). Такие файлы считаются исполняемыми файлами практически для всех целей, хотя их нельзя запускать напрямую.

Чтобы узнать, является ли ваш файл исполняемым файлом или библиотекой динамической компоновки, просто установите этот бит. Если он установлен в 1, это DLL, если он установлен в 0, является исполняемым. Чтобы проверить PE (без кода), у вас есть несколько вариантов, например, проверьте CFF Explorer или dnSpy.

(в вашем случае вы увидите, что этот флаг установлен в 1)

Еще одинИнтересно, что вы можете проверить это EntryPointToken внутри .NET Directory (не путайте с AddressOfEntryPoint в дополнительном заголовке).

0 голосов
/ 22 декабря 2019

Тип проекта и его точка входа

1. .NetFramework ConsoleApp:

 *Static Void Main(string args[]){}*

2. .NetCore App:

 *Static Void Main //When you execute `dotnet new`*

3. ASP.NET/ASP WebAPI:

   *Constructor of HttpApplication class*

ASP.NET автоматически связывает события приложения с обработчиками в файле Global.asax Application_Start и / или Application_BeginRequest

4. WPF:

*App.Xaml overriden Method OnStartUp*
//Main method is autogenerated and is present in App.g.i.cs file located in App.Xaml.cs
//To override this behavior change Build type of App.Xaml from AppDefinition to Page

5. WINForms

*Static Void Main(string args[]){}* //Program.cs

6. С DLL

 *[DllImport("DllName", EntryPoint = "Functionname")]*
 //Dlls do not have an entry point, the EntryPoint attribute above ensures that the the .NET runtime knows which function to call from the DLL being invoked

PS

В программе на C # может быть только одна точка входа. Если у вас есть несколько классов, у которых есть метод Main, вы должны скомпилировать вашу программу с параметром компилятора / main, чтобы указать, какой метод Main использовать в качестве точки входа.

Ссылка:

Обзор жизненного цикла ASP.NET:

https://docs.microsoft.com/en-us/previous-versions/ms178473(v=vs.140)?redirectedfrom=MSDN

https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/main-and-command-args/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...