我在 Node.js 代码中使用 .env 文件来处理开发环境配置中的机密。我将 .env 添加到项目的 .gitignore 中,以防止将机密提交到 git 存储库。
我发现 node.js 的 .env 方法非常简单且高效。
C# 中的 .env 文件相当于什么?
带着这个问题,我并不是在寻找一个在 C# 中执行相同操作的库,例如(https://github.com/tonerdo/dotnet-env)
我想知道处理同样事情的 C# 方法,重点是不要将配置文件中的秘密提交到 git 存储库。
这不是 Azure 问题,因此 Azure Key Vault Azure 应用服务超出了此处的范围。
更新#1
请注意,我并不是要求处理我的 .net 应用程序中的机密。
多年来我一直在使用下面文档中的选项:
https://learn.microsoft.com/en-us/aspnet/core/security/app-secrets?view=aspnetcore-6.0&tabs=windows
当我开始学习 Node.js 并使用它时,.env我希望在 .net 中也能拥有同样的东西。
.env当我在开发人员笔记本电脑上开发 Node.js 应用程序时,文件使我不必不断调整环境变量。在生产中我设置了环境变量。
在我的本地开发人员笔记本电脑上,我喜欢将环境变量保存在.env文本文件中。我信任我的本地笔记本电脑加密硬盘,并且我的开发环境中不涉及生产密码。
本质上,我试图避免下面的选项以及在编码时不断调整环境变量的麻烦。
更新#2
.env这种情况可能会凸显文件的优势:
当我开发node.js应用程序时,在 VSCode 中,我.env在单独的选项卡中打开文件,以不断更改变量并在 VSCode 终端中运行我的 Node.js 应用程序。该场景是在调试/跟踪我的应用程序时尝试不同的服务原则、不同的数据库凭据、网络凭据等。c#为了快速在或项目中执行相同的操作.netcode,我必须有一个 bash 脚本来设置环境变量,之前每次都进行调整并跟踪/调试我的应用程序。
set-secret-env-vars.sh虽然记住将 添加到文件中很重要.gitignore,但请考虑 的node.js标准.gitignore文件已经包含 ,.env因为该过程在node.js应用程序中是标准且简化的。
set-secret-env-vars.sh请注意,我曾经在编码和调试我的应用程序时使用该方法node.js。后来了解了一下.env,发现比较方便。这就是为什么我试图寻找一种类似的c#应用程序开发工作流程方法。
更新#3
据我了解,这里讨论的大多数选项/解决方法都是特定于 IDE 或工具的。
launch.json是 VSCODE 的功能。如果您想受益,您需要使用 VSCODE 启动代码。通过.env接近,我可以跑步node app1.js等等node app2.js。
如果我需要使用 JetBrain 的 Rider 进行开发会怎样?它是一个备受推崇的.net IDE。
我的观点是,它.env不依赖于任何 IDE,而且据我了解,它被许多其他平台(例如 Python)很好地采用了。
我会给你我认为可靠的答案,但同时承认还有其他选择。
所做的基本上dotenv是为 NodeJS 进程创建环境变量。然后可以通过 访问这些内容process.env。就这样。
如果您想要 C# 中的等效项,则可以从 .Net 配置框中获得该功能。
就 ASP.net 而言,它带有预定义的配置源。其中之一是无前缀环境变量源。它从遵循标准化名称约定的环境变量中获取数据。
假设你有appsettings.json这样的:
{
"SecretSection": {
"Username": "myUsername",
"Password": "CatOnKeyboard"
}
Run Code Online (Sandbox Code Playgroud)
如果您有该 JSON 配置文件,您可能有一个用 C# 声明的类(例如,名为MySecretSection),其属性如下所示Username,并Password在服务中进行配置:
var cfgSection = builder.Configuration.GetSection("SecretSection");
builder.Services.Configure<MySecretSection>(cfgSection);
Run Code Online (Sandbox Code Playgroud)
这将允许您使用选项模式来访问该部分的数据:
public class SomeService
{
public SomeService(IOptions<MySecretSection> secretOptions)
{
// Now you can use the username and password:
var opts = secretOptions.Value;
System.Diagnostics.Debug.Print($"{opts.Username} : {opts.Password}");
}
}
Run Code Online (Sandbox Code Playgroud)
好的,但是秘密数据绝对不应该暴露在appsettings.json公众面前。
如果您愿意,您可以执行相应操作dotenv,只需为每个机密创建环境变量即可。
myUsername.CatOnKeyboard.就是这样。Asp.Net 将自动选取那些根据命名约定表示层次结构键SecretSection:Username和SecretSection:Password.
为了在 c# 或 .netcode 项目中快速执行相同的操作,我必须有一个 bash 脚本来设置环境变量,之前每次都进行调整并跟踪/调试我的应用程序。
没有为什么?与您执行的操作完全相同,.env但文件将是launch.json. 您可以以完全相同的方式进行操作:不断调整和运行,不涉及脚本。您是否可能不知道可以在launch.json(VS Code)/ launchSettings.json(Visual Studio/Rider)中设置环境变量?
您还可以打开用户机密文件进行调整。
我明白你的意思。现在我将正式欢迎您使用更加优越的.Net 配置系统。
你看,你生活在NodeJS世界中,配置包 (dotenv) 非常有限,而.Net为你提供了一个非常非常优越的配置系统。
您想避免编写脚本吗?您是否只想更新一个文件并重新运行,无需重新编译且不绑定到 IDE?appsettings.json.Net 为您提供支持:在或 中进行调整appsettings.<environment>.json并重新启动。如果需要,您甚至可以通过调整配置的配置来避免重新启动。
旁注:我为您所有的 JavaScript 需求(服务器和浏览器)创建了一个配置包,它模仿 .Net 提供的功能: wj-config