環境變量詳解
Windows操作系統的環境變量在哪設置應該都知道了。
Linux(centos版本)的環境變量在/etc/profile里面進行設置。用戶級的環境變量在其它文件里面,不多說了,有興趣的可以網上查下。
當我們的應用程序發布到生產環境時,如果用到了環境變量,就需要對服務器操作系統的環境變量進行設置。這里只是進行提前說明。
設置環境變量
環境變量可以在launchSettings.json文件里面設置,也可以右鍵項目->屬性->調試->環境變量進行設置。這兩種方式的內容是同步的,任何一種方式修改后,另外一種就會同步。只不過一個是直接修改文件,一個是通過可視化的界面進行修改。
說明:
1.如果SongLou.Web下面的applicationUrl設置成ip,且沒有在program.cs里面使用UseUrls()綁定訪問地址,那么這里的設置是有效的。如果使用UseUrls()進行了設置,那么這里的設置就無效了,被代碼級的設置覆蓋了。
2.假如啟動方式是IIS Express,那么在視圖界面設置后,更改會同步到launchSettings.json里的IIS Express下。如果是自宿主的方式,那么在視圖界面設置后,更改會同步到launchSettings.json里的SongLou.Web下。IIS Express下url不能設置成IP。
使用環境變量
在默認的HomeController的Index方法里面加入以下代碼進行測試:
在地址欄輸入:http://10.101.56.52/(我的IP),查看結果:
因為我當前是以自宿主的方式運行的項目,所以看到的結果是launchSettings.json里面的SongLou.Web下的數據。如下圖:
Centos環境變量設置
當應用發布到生產環境時,如果用到環境變量,還需要在服務器的操作系統里面進行設置。
export ASPNETCORE_ENVIRONMENT=product
export username=subendong
export password=111111
將這三行代碼拷貝到/etc/profile文件末尾,並保存。然后更新profile。
[root@localhost ~]# source /etc/profile
然后用dotnet命令重新啟動web引用。在啟動前別忘記開啟80端口。
[root@localhost songlou]# dotnet SongLou.Web.dll
會看到Hosting environment:product,就是我們上面設置的ASPNETCORE_ENVIRONMENT。
同時程序輸出的結果也發生了變化,跟開發環境不一樣了,如下圖:
重要說明:在centos設置系統級的環境變量時,今天犯了一個比較低級的錯誤,就是開了兩個遠程連接窗口,在窗口2設置了環境變量,也更新了,但就是不起作用。最后經過幾個小時的排查,終於找到了原因。如果在窗口2做的設置,那么窗口1也要更新profile文件。只有窗口1更新了profile之后,運行dotnet命令才起作用。如果一開始profile也是在窗口1做的更改就不會耽誤那么久了。