利用 .env 檔來存放應用程式所需要的環境變數是個相當不錯的方案,一來可以避免敏感資訊外洩,二來方便另一個使用者使用他自己的環境設定值,在玩 .NET Notebook 時,有時候也會想藉此來把像是 API Key 之類的設定值,抽離程式碼中,避免寫死設定又不小心提交到版控庫中,這裡來看看可以如何在 .NET Notebook 中載入 .env 檔。

自己動手讀

因為 .env 檔的內容格式相當簡單且容易理解,基本上就長得像下面那樣 key=value 這樣的配對:

YOUR_VARIABLE='你的環境變數'

所以其實我們可以自己寫一小段程式碼來讀取這個檔案內容,如下:

public static class DotEnv
{
    public static Dictionary<string, string> Load(string filePath)
    {
        if (!File.Exists(filePath)) return default;

        var env = new Dictionary<string, string>();

        foreach (var line in File.ReadAllLines(filePath))
        {
            var parts = line.Split('=', StringSplitOptions.RemoveEmptyEntries);

            if (parts.Length != 2) continue;

            env.Add(parts[0], parts[1]);
        }
        return env;
    }
}

如此一來,就可以使用讀取 .env 檔的內容了。

使用套件

但是因為我們是想要在 .NET Notebook 中使用,如果每次都要在 Notebook 中寫上那一段程式碼,也太囉嗦了,況且功能相當簡陋。

剛好 .NET Notebook 可以讓我們自行安裝 NuGet 套件,因此這裡推薦使用 dotenv.net 這個第三方套件,功能豐富且易用。

使用方式相當簡單,首先,安裝 dotenv.net 套件,這邊直接設定 *-* 使用該套件最新的版本:

#i "nuget:https://api.nuget.org/v3/index.json"
#r "nuget: dotenv.net, *-*"

接者假設我們相同的資料夾中有 .env 檔案,內容如下:

YOUR_VARIABLE='你的環境變數'

如此一來,就可以使用下面的方式來快速取得指定的環境變數值,這裡我使用此套件提供的 Fluent API 方式來操作:

using dotenv.net;

var envVars = DotEnv.Fluent()
    .WithEnvFiles()
    .Read();

display(envVars["YOUR_VARIABLE"]);

.NET Notebook 的畫面如下:

在 .NET Notebook 中使用 dotenv.net 讀取 .env 檔

輕鬆取得 .env 檔案中的環境變數設定。

更多 dotenv.net 套件的使用方式請直接到該專案的 GitHub 中查詢,文件寫得相當完善且 API 很容易上手。

後記

還有其他 NuGet 套件也能處理載入 .env 的動作,如果你有興趣可以另外嘗試這兩個套件 dotnet-envnet-dotenv


參考資料:


Poy Chang

Trial and Error