ASPNETCORE_ENVIRONMENT 失效的原因
TLDR
- 當在 Windows 全域環境變數設定
ASPNETCORE_ENVIRONMENT後,ASP.NET Core 應用程式可能無法立即讀取到新設定。 - 僅重啟網站或應用程式池(Application Pool)無法更新 IIS 讀取的環境變數。
- 必須執行
iisreset指令強制重新啟動 IIS 服務,才能確保環境變數變更生效。
環境變數設定失效的問題情境
什麼情況下會遇到這個問題:在 Windows Server 環境下,透過系統全域設定修改 ASPNETCORE_ENVIRONMENT 環境變數,但應用程式仍持續讀取預設的 appsettings.json,而未切換至對應的 appsettings.{Environment}.json。
在 IIS 託管的 ASP.NET Core 應用程式中,即便在作業系統層級正確設定了環境變數,IIS 的處理程序(w3wp.exe)往往因為快取機制或服務生命週期管理,無法即時偵測到系統環境變數的異動。此時,單純的「停止並啟動網站」或「回收應用程式池」皆無法強制 IIS 重新讀取作業系統的全域環境變數。
解決方案與驗證
什麼情況下需要執行此動作:當確認環境變數已正確寫入系統設定,但應用程式行為未發生預期改變時。
若要使變更生效,必須強制重啟 IIS 服務。請以系統管理員權限開啟命令提示字元(CMD)或 PowerShell,並執行以下指令:
bash
iisreset /restartTIP
執行 iisreset 指令會中斷伺服器上所有託管的網站服務,請務必在維護時間或確認對業務影響後執行。
執行完成後,IIS 將會重新載入所有環境變數,應用程式即可正確讀取到設定的 ASPNETCORE_ENVIRONMENT 值。
異動歷程
- 2024-09-19 初版文件建立。
