2026-04-29 妳寫 program.cs 有這個public static void Main(string[] args)進入點, 但我看到的另一個專案,並沒有 main ...

2026-04-29 妳寫 program.cs 有這個public static void Main(string[] args)進入點, 但我看到的另一個專案,並沒有 main …

我:
但我看到妳寫的 program.cs 有這個public static void Main(string[] args)進入點, 但我看到的另一個專案,並沒有 main …

你提到的情況非常有趣,其實是和不同版本的 ASP.NET Core 框架以及專案類型的特性有關。讓我解釋一下為什麼在一些專案中你看不到 Main 方法,而在另一些專案中則可以看到。

1. 不同 ASP.NET Core 專案模板的差異

ASP.NET Core 是用來創建 Web API 的常用框架,隨著框架版本的更新,專案模板和結構也有所改變。在一些較新的版本中,Microsoft 引入了最小化 API(Minimal API) 的概念,這導致了一些專案不再顯示 Main 方法,或是使用了更簡潔的代碼結構。

典型的 Web API 專案(有 Main 方法)

在大多數 ASP.NET Core Web API 的專案中,你會看到 Program.cs 檔案裡有類似這樣的代碼:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class Program
{
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
}

public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
}

在這種結構中,Main 方法是明確的進入點,用於啟動整個應用程式。這是 ASP.NET Core 早期和典型的 Web API 專案結構,適用於 ASP.NET Core 2.x 或 3.x。

最小化 API 專案(沒有明顯的 Main 方法)

ASP.NET Core 6 開始,Microsoft 引入了最小化 API(Minimal API),這是一種新的、更簡潔的方式來構建 Web API,適合簡單的應用程式。這些專案的 Program.cs 看起來更加簡潔,並且不需要顯式定義 Main 方法。如下所示:

1
2
3
4
5
6
var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();

app.MapGet("/", () => "Hello World!");

app.Run();

在這裡,你可以看到:

  • 沒有明顯的 Main 方法,代碼變得更加簡潔。
  • CreateBuilderBuild 是用來創建應用程式和設定的,但它們並不是通過 Main 方法來顯示啟動。

實際上,編譯器在背後依然會自動生成 Main 方法,但這個方法對開發者來說是隱藏的,不需要顯式撰寫。這是為了讓開發過程更方便,特別是對於簡單的 API 或測試來說,減少了樣板代碼(Boilerplate Code)。

2. 為什麼看不到 Main 方法

在使用 最小化 API 的專案中,Main 方法依然存在,但它是隱藏的,這是因為:

  1. 簡化代碼:Microsoft 希望讓開發者編寫更簡單的代碼,減少不必要的樣板代碼,特別是對於簡單應用程式或快速原型來說。
  2. 框架的改進:從 ASP.NET Core 6 開始,框架的改進讓這些常見的設定和初始化工作被隱藏起來,並且由框架來自動處理。

小結

  1. ASP.NET Core Web API 中的 Main 方法依然存在,只是它的存在形式和你所用的專案模板、框架版本有關。
  2. 典型的 Web API(如 ASP.NET Core 2.x 或 3.x)中,你會看到 Main 方法明確地定義在 Program.cs 中,負責啟動應用程式。
  3. 最小化 API(如 ASP.NET Core 6 及以上)中,Main 方法是隱藏的,代碼更加簡潔,開發者不再需要直接撰寫 Main 方法。

問題

問題:

  1. 為什麼在 ASP.NET Core 6 使用的最小化 API 中看不到 Main 方法?
  2. 使用最小化 API 的優勢是什麼?

希望這些解釋能幫助你理解為什麼有些 Web API 專案中沒有顯式的 Main 方法。如果還有任何疑問,請隨時告訴我!