在上一篇 ASP.NET Core - ENVIRONMENT 提到可以設定環境變數 ASPNETCORE_ENVIRONMENT ,然後代碼中可以依據所設定的環境變數作相對應的邏輯處理,舉例來說如果是 Production 環境的話就關閉錯誤訊息畫面、產生系統監控...等行為,一般來說設定完環境變數 Environment Variable 都需要重啟電腦讓設定值生效,但是如果在 Production 機器可能有多個站台架設在同主機時,重啟勢必會造成其他服務中斷狀況發生,這一篇就分享如何設定完環境變數後不用重啟的方法,若有問題或是錯誤的地方歡迎各位高手給予指導。
如何解決
首先,建立新專案並加入下列代碼,此代碼主要用途為顯示目前環境變數 Environment Variable 中 ASPNETCORE_ENVIRONMENT 所設定的值並透過 console write 顯示出來
using System; namespace CoreConsoleApp { class Program { static void Main(string[] args) { Console.WriteLine($"EnvironmentVariable is : {Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT")}"); Console.ReadKey(); } } }
目前系統中 ASPNETCORE_ENVIRONMENT 設定的值為 Development,因此在輸出值為 Development
接著,我們把系統變數 ASPNETCORE_ENVIRONMENT 更新成 Production,在執行一次結果如下
可以發現輸出的值由於 Windows cache 的關係,並不會更新為 Production,過去遇到此問題時重新啟動電腦就可以抓到最新設定的值,但今天發現另一個方法可以不用重啟電腦達到相同效果,步驟如下
Step 1 : 開啟 cmd.exe
Step 2 : 輸入指令 refreshenv
成功輸出環境變數值 Production !
備註 : 使用 refreshenv 指令需先安裝 chocolatey,否則會找不到該指令 (謝謝 Jake 提醒 !! )
感想
這邊只是透過 Console Demo 執行 refreshenv 指令效果,在 Production 機器上如果是 IIS 站台或是應用程式集區可以停止後重新啟動來讀取最新環境變數值資訊,如果有遇到相同問題的朋友不妨參考看看此做法,就不用重新開機影響到同站台其他 Application 服務 :)接著,我們把系統變數 ASPNETCORE_ENVIRONMENT 更新成 Production,在執行一次結果如下
可以發現輸出的值由於 Windows cache 的關係,並不會更新為 Production,過去遇到此問題時重新啟動電腦就可以抓到最新設定的值,但今天發現另一個方法可以不用重啟電腦達到相同效果,步驟如下
Step 1 : 開啟 cmd.exe
Step 2 : 輸入指令 refreshenv
Microsoft Windows [版本 10.0.17763.437] (c) 2018 Microsoft Corporation. 著作權所有,並保留一切權利。 C:\Users\marcustung\source\repos\CoreConsoleApp\CoreConsoleApp>refreshenv Refreshing environment variables from registry for cmd.exe. Please wait...Finished..Step 3 : 關閉在重開 Visual Studio 2019,開啟後重新執行 console application
成功輸出環境變數值 Production !
備註 : 使用 refreshenv 指令需先安裝 chocolatey,否則會找不到該指令 (謝謝 Jake 提醒 !! )
感想
參考
Is there a command to refresh environment variables from the command prompt in Windows?
沒有這個指令 refreshenv
回覆刪除BTW, 測試 DOTNETCORE 重啟IIS APP POOL沒有用, 應該是 CORE不給IIS託管
刪除Hi Jake, 內文未說明指令 refreshenv 需要先安裝 chocolatey 才可執行,已補上相關說明,謝謝你的提醒 :)
回覆刪除