在 Global.asax 的 Application_Start、Application_Error 或靜態方法中,無法使用 Server.MapPath()(需 HttpContext),此時需透過 AppDomain 取得網站根目錄實體路徑。
string absolutePath = AppDomain.CurrentDomain.BaseDirectory;
C:\inetpub\wwwroot\MyWebApp\ // IIS 部署
D:\Projects\MyWebApp\ // Visual Studio 偵錯 (IIS Express)
/var/www/MyWebApp/ // Linux + Kestrel (ASP.NET Core 另用 IWebHostEnvironment)
~/App_Data/、~/Logs/、~/Temp/ 等非網頁存取資料夾Path.Combine(absolutePath, "Config", "settings.json")若為 ASP.NET Core,請注入 IWebHostEnvironment 或 IHostEnvironment,使用 env.ContentRootPath 取得專案根目錄,env.WebRootPath 取得 wwwroot 目錄。
| 情境 | API | 備註 |
|---|---|---|
| .aspx / .ashx / Controller Action | Server.MapPath("~/xxx") | 需 HttpContext |
| Global.asax / 靜態類別 / 背景執行緒 | AppDomain.CurrentDomain.BaseDirectory | 無需 HttpContext |
| ASP.NET Core (DI) | IWebHostEnvironment.ContentRootPath | 建構子注入 |
| 類別庫專案 | Assembly.GetExecutingAssembly().Location | 取得 DLL 所在目錄 |