介紹幾個 .NET SDK、.NET CLI 與 .NET runtime 執行時的好用環境變數 | The Will Will Web

The Will Will Web

記載著 Will 在網路世界的學習心得與技術分享

介紹幾個 .NET SDK、.NET CLI 與 .NET runtime 執行時的好用環境變數

我在 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_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 開始就有這個功能,不過這個功能非常陽春,他骨子裡其實是把要部署的幾百個檔案壓縮成一個檔案而已,執行的時候其實還是需要先「解壓縮」到一個暫存目錄才能跑起來的,而這個暫存目錄非常的隱蔽不好找,久而久之可能會大量耗用你的硬碟空間!

    如果你想自行決定解壓縮的路徑,可以設定這組環境變數! 👍

其他環境變數應該就很少用了,我自己也沒用過,更想不太到使用情境,有興趣看完整版可以參考以下相關連結!

相關連結