我在 Environment variables used by .NET SDK, .NET CLI, and .NET runtime 這篇文章中看到幾個很有機會用到的環境變數設定,有些在容器中常用,有些在 CI 的時候常用,我覺得先整理起來,以後有機會就可以用上!
-
DOTNET_ROOT
當你安裝 .NET SDK 到系統層級的時候,這個環境變數沒啥用處,因為有預設值。Windows 預設路徑在 C:\Program Files\dotnet
,而 Linux 與 macOS 預設路徑在 /usr/share/dotnet
!
但是當你安裝在使用者層級的時候,這個環境變數就非常重要,沒有這個很容易會導致程式無法執行,像我在 Linux 環境下安裝 .NET SDK 就不太喜歡安裝到系統層級,所以我就會在 ~/.profile
特別加入 DOTNET_ROOT
環境變數設定,指向到 ~/dotnet
資料夾!
-
NUGET_PACKAGES
由於本機的 NuGet 套件快取,主要跟「使用者」有關,所以快取的目錄都是個人化的。
Windows 的預設路徑為 %userprofile%\.nuget\packages
,且不太常改,除非你的 C 槽快滿了,就可以透過調整這個環境變數來換掉預設的 NuGet 快取資料夾路徑。
Linux 與 macOS 的預設路徑為 ~/.nuget/packages
,通常也不太需要修改。
-
DOTNET_NOLOGO
當你在剛安裝好 .NET SDK/Runtime 的時候,第一次執行 dotnet
命令,就會出現「第一次執行的相關說明」,而且只會出現一次,所以在 CI 的時候出現這個訊息就很沒意義,建議設定為 1
即可,設定完成後就不會再次出現這類訊息。
請注意: 這個環境變數在 .NET Core 3.x 的時候,環境變數的名稱是 DOTNET_SKIP_FIRST_TIME_EXPERIENCE
喔,是從 .NET 5 才改為 DOTNET_NOLOGO
環境變數名稱的!
-
DOTNET_GENERATE_ASPNET_CERTIFICATE
大家可能不知道 .NET SDK/Runtime 的 dotnet
執行檔在首次執行的時候會自動產生一個開發用自簽憑證,但是如果你正在安裝的環境是一個未來需要轉發(Redistribute)的容器映象(Container image)或虛擬機器(VM),你就不應該建立這個自簽憑證,因為自簽憑證預設只有一年效期。你只要在安裝好 .NET SDK/Runtime 之後,設定這個 DOTNET_GENERATE_ASPNET_CERTIFICATE
環境變數,並將其值設為 false
即可避免產生自簽憑證!
-
DOTNET_CLI_TELEMETRY_OPTOUT
.NET SDK/Runtime 預設會啟用 Telemetry (遙測) 機制,分析一般人使用 .NET CLI 的基礎統計資訊,許多公司也會特別關閉這類遙測訊息,以確保資訊安全。我通常會在 CI 或程式跑在容器時關閉這個機制,因此建議設定為 1
即可。
-
DOTNET_ROLL_FORWARD
決定你要如何選擇 .NET SDK 版本,這部分講解過於複雜,建議先閱讀我之前的 使用 global.json 精準的選擇 .NET SDK 版本 文章之後,再來做設定。
基本上你可以設定的值可以是:patch
, feature
, minor
, major
, latestPatch
, latestFeature
, latestMinor
, latestMajor
, disable
-
DOTNET_ROLL_FORWARD_TO_PRERELEASE
決定你要如何選擇 .NET SDK 版本,這部分講解過於複雜,建議先閱讀我之前的 使用 global.json 精準的選擇 .NET SDK 版本 文章之後,再來做設定。
這個預設值為 0
(Disabled),你也可以設定為 1
來讓 .NET SDK/Runtime 選用 Prerelease 版本。
-
DOTNET_CLI_UI_LANGUAGE
可以設定 .NET CLI 命令列環境的顯示語言版本,預設為 en-us
英文,但如果你的電腦意外顯示成中文,就可以設定這個環境變數來決定 dotnet
命令執行時選用的語言翻譯。
設定值為 zh-tw
可以顯示正體中文,使用 en-us
就可以強迫顯示英文。
-
DOTNET_BUNDLE_EXTRACT_BASE_DIR
.NET Core 在部署的時候,可以用以下命令發行成單一檔案,大幅簡化日後部署的難度。
dotnet publish -r win10-x64 -p:PublishSingleFile=true
從 .NET Core 3.0 開始就有這個功能,不過這個功能非常陽春,他骨子裡其實是把要部署的幾百個檔案壓縮成一個檔案而已,執行的時候其實還是需要先「解壓縮」到一個暫存目錄才能跑起來的,而這個暫存目錄非常的隱蔽不好找,久而久之可能會大量耗用你的硬碟空間!
如果你想自行決定解壓縮的路徑,可以設定這組環境變數! 👍
其他環境變數應該就很少用了,我自己也沒用過,更想不太到使用情境,有興趣看完整版可以參考以下相關連結!
相關連結