簡體   English   中英

ASP.NET MVC 中的 C# 語言規范和入口點

[英]C# Language Specification and Entry Point in ASP.NET MVC

我正在閱讀 C# 語言規范; ECMA-334。

在“8.1 應用程序啟動”一節中,它說入口點名稱應該是Main 但是在 ASP.NET MVC 應用程序中,入口點將在Global.asax ,名稱為Application_Start

這是否意味着 ASP.NET MVC 應用程序不是應用程序而是類庫?

我假設您在談論“經典”asp.net(而不是 .net 核心)。 它確實是一個類庫,並且由 IIS 應用程序池托管(嗯,大部分時間)。 設置 IIS,您會注意到它在 Web 應用程序方面運行 - 這基本上是您的入口點,它與所有管道一起為您提供。

你可以有一個自托管的 asp.net 應用程序,但我相信如果你走那條路,你一定有一個很好的用例

回答您的問題最可靠的方法是研究 PE。

PE頭的第二部分是文件頭,它包含幾個位信息,其中之一是特征

特征字段包含指示對象或圖像文件的屬性的標志。

標志之一是 0x2000

圖像文件是一個動態鏈接庫 (DLL)。 此類文件幾乎在所有用途中都被視為可執行文件,盡管它們不能直接運行。

所以要知道你的文件是可執行文件還是動態鏈接庫,只需檢查這一點。 如果設置為 1 是 DLL 如果設置為 0 是可執行的。 要檢查 PE(無代碼),您有多種選擇,例如檢查 CFF Explorer 或 dnSpy。

(在您的情況下,您會看到此標志設置為 1)

您可以檢查的一個更有趣的是 .NET 目錄中的 EntryPointToken(不要與可選標題中的 AddressOfEntryPoint 混淆)。

項目類型及其切入點

1. .NetFramework 控制台應用程序:

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

2. .NetCore 應用程序:

 *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

聚苯乙烯

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/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM