dotnet-env: .NET 开发者的环境变量加载工具

在开发过程中,我们经常需要使用环境变量来配置应用程序,dotnet-env 是一个 .NET 库,它可以从 .env 文件中加载环境变量。 这个库支持 .NET Core 和 .NET Framework(4.6 及以上版本)。

安装方法

你可以通过两种方式安装 dotnet-env:

  • 在 Visual Studio 的包管理器控制台中运行命令:

    powershell 复制代码
    PM> Install-Package DotNetEnv
  • 在 .NET CLI 中运行命令:

    bash 复制代码
    dotnet add package DotNetEnv

基本用法

加载 .env 文件

默认情况下,Load() 方法会在当前目录查找 .env 文件:

csharp 复制代码
DotNetEnv.Env.Load();

如果想让程序向上级目录查找 .env 文件,可以使用 TraversePath() 方法:

csharp 复制代码
DotNetEnv.Env.TraversePath().Load();

你也可以指定 .env 文件的路径:

csharp 复制代码
DotNetEnv.Env.Load("./path/to/.env");

除了文件路径,还可以从流或字符串中加载内容:

csharp 复制代码
using (var stream = File.OpenRead("./path/to/.env")) {
    DotNetEnv.Env.Load(stream);
}

DotNetEnv.Env.LoadContents("OK=GOOD\nTEST=\"more stuff\"");

如果有多个 .env 文件,可以用 LoadMulti() 按顺序加载:

csharp 复制代码
DotNetEnv.Env.LoadMulti(new[] { ".env", ".env2" });

注意:后面的文件中的变量会覆盖前面的值。

如果你不希望这样,可以使用 NoClobber() 方法。


访问环境变量

加载完成后,可以通过以下方式访问环境变量:

  • 使用 .NET 内置的方法:

    csharp 复制代码
    System.Environment.GetEnvironmentVariable("IP");
  • 或者使用 dotnet-env 提供的方法:

    csharp 复制代码
    DotNetEnv.Env.GetString("A_STRING");
    DotNetEnv.Env.GetBool("A_BOOL");
    DotNetEnv.Env.GetInt("AN_INT");
    DotNetEnv.Env.GetDouble("A_DOUBLE");

这些方法还支持设置默认值:

csharp 复制代码
DotNetEnv.Env.GetString("THIS_DOES_NOT_EXIST", "未找到变量");

高级设置

你可以通过 LoadOptions 来控制加载行为:

csharp 复制代码
new DotNetEnv.LoadOptions(
    setEnvVars: true,
    clobberExistingVars: true,
    onlyExactPath: true
)

推荐使用链式调用语法来设置选项:

csharp 复制代码
DotNetEnv.Env.NoEnvVars().NoClobber().TraversePath().Load();
参数说明:
  1. setEnvVars :是否将 .env 中的变量写入系统环境变量。

    • 默认为 true
    • 设置为 false 时,只读取变量,不会修改系统环境变量。
  2. clobberExistingVars:是否覆盖已有的环境变量。

    • 默认为 true
    • 设置为 false 时,保留已有环境变量。
  3. onlyExactPath :是否仅在指定路径查找 .env 文件。

    • 默认为 false
    • 设置为 true 时,不会向上级目录查找。

集成到 ConfigurationBuilder

dotnet-env 可以轻松集成到 .NET 的 ConfigurationBuilder 中:

csharp 复制代码
var configuration = new ConfigurationBuilder()
    .AddDotNetEnv(".env", LoadOptions.TraversePath())
    .Build();

该功能会将 __ 解析为 :,从而支持嵌套结构:

sh 复制代码
APP__PORT=5000

对应 C# 中的访问方式:

csharp 复制代码
configuration["APP:PORT"]; // 返回 "5000"

.env 文件格式说明

.env 文件的格式简单易懂。

简单赋值

sh 复制代码
KEY=value

支持的导出关键字

sh 复制代码
export KEY="value"
set KEY=value
SET KEY=value
set -x KEY=value

插值语法

sh 复制代码
KEY=${ENVVAR:-default}      # 如果 ENVVAR 不存在,则使用 default
KEY=${ENVVAR?error}         # 如果 ENVVAR 不存在,则返回 error
KEY=${ENVVAR:+alternative}  # 如果 ENVVAR 存在,则使用 alternative

多行值

sh 复制代码
KEY="value
and more"

Unicode 字符

sh 复制代码
UTF8_BYTES="\xF0\x9F\x9A\x80"  # 🚀
UTF16_BYTES="\uae"             # ®

使用建议

  • 不要在生产环境中使用 .env 文件。

    这个工具主要用于本地开发。

  • 生产环境应直接使用系统环境变量。

  • .env 文件应存储在安全的地方,例如 1Password、LastPass 或 S3。

    团队成员可以下载一份用于本地开发。

  • 环境变量应在程序启动时一次性加载。

    不要在程序运行期间多次读取。


总结

dotnet-env 是一个简单好用的工具。

它可以帮你快速加载 .env 文件中的变量。

无论你是开发 Web 应用、微服务还是控制台程序,都可以使用它。

现在就去试试吧!🚀

GitHub 地址:https://github.com/tonerdo/dotnet-env

相关推荐
缺点内向1 小时前
如何在 C# 中将 Excel 工作表拆分为多个窗格
开发语言·c#·.net·excel
veneno7 小时前
大量异步并发请求控制并发解决方案
前端
i***t9197 小时前
Spring Boot项目接收前端参数的11种方式
前端·spring boot·后端
oden8 小时前
2025博客框架选择指南:Hugo、Astro、Hexo该选哪个?
前端·html
小光学长8 小时前
基于ssm的宠物交易系统的设计与实现850mb48h(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
java·前端·数据库
小小前端要继续努力8 小时前
渐进增强、优雅降级及现代Web开发技术详解
前端
夏霞9 小时前
c# 使用vs code 创建.net8.0以及.net6.0 webApi项目的教程
开发语言·c#·.net
追逐时光者9 小时前
C#/.NET/.NET Core优秀项目和框架2025年11月简报
后端·.net
老前端的功夫9 小时前
前端技术选型的理性之道:构建可量化的ROI评估模型
前端·javascript·人工智能·ubuntu·前端框架
狮子座的男孩9 小时前
js函数高级:04、详解执行上下文与执行上下文栈(变量提升与函数提升、执行上下文、执行上下文栈)及相关面试题
前端·javascript·经验分享·变量提升与函数提升·执行上下文·执行上下文栈·相关面试题