[英]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.