我在node.js代码中使用node.js文件来处理开发环境配置中的秘密。我将.env添加到项目的.gitignore中,以防止机密被提交到git存储库。
我发现node.js的.env方法非常简单和高效。
.env文件在C#中的等效值是多少?
有了这个问题,我不需要一个库在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应用程序时,.env文件帮助我避免不断地调整环境变量。在生产中,我设置了env变量。
在本地开发人员膝上型计算机上,我喜欢将环境变量保存在.env文本文件中。我信任我的本地笔记本电脑加密的硬盘驱动器,在我的开发环境中不涉及生产密码。
本质上,我试图避免下面的选项以及在编写代码时不断调整环境变量的麻烦。

更新#2
此场景可能突出.env文件的优势:
当我在VSCODE中开发node.js应用程序时,我在一个单独的选项卡中打开了.env文件,以保持变量的变化,并在vscode终端中运行我的node.js应用程序。方案是在调试/跟踪应用程序时尝试不同的服务原则、不同的数据库凭据、网络凭据等。要在c#或.netcode项目中快速执行同样的操作,我必须有一个bash脚本来设置环境变量,每次都会对其进行调整,并跟踪/调试我的应用程序。
虽然记住将set-secret-env-vars.sh添加到.gitignore文件是很重要的,但是请考虑node.js的标准.gitignore文件已经包含了.env,因为在node.js应用程序中这个过程是标准的和流线型的。
请注意,我以前在编写和调试node.js应用程序时使用了node.js方法。然后了解了.env,发现它更方便。这就是为什么我试图找到一个c#应用程序开发工作流的simialr方法。
更新#3
据我理解,这里讨论的大多数选项/解决方案都是特定于IDE或工具的。
launch.json是VSCODE的特点。如果要从中受益,需要使用VSCODE启动代码。使用.env方法,我可以运行node app1.js或node app2.js等。
如果我需要使用JetBrain的骑士进行开发,会发生什么?这是一个非常受人尊敬的.net IDE。
我的观点是,.env并不依赖于任何一个IDE,据我所知,它被许多其他平台(如Python )所采用。
发布于 2022-10-12 19:26:38
我会给你我认为是一个坚实的答案,但同时承认还有其他选择。
dotenv所做的基本上是为NodeJS过程创建环境变量。然后通过process.env访问这些数据。就这样。
如果您想要C#中的等价物,这已经可以从.Net配置框中获得。
就ASP.net而言,它伴随着预定义配置源。其中一个是无前缀环境变量源。这个方法从遵循标准化名称约定的环境变量中获取数据。
假设你有这样的appsettings.json:
{
"SecretSection": {
"Username": "myUsername",
"Password": "CatOnKeyboard"
}如果要拥有该JSON配置文件,则可能有一个在C#中声明的类(例如,MySecretSection),其中包含在服务中配置的属性Username和Password,如下所示:
var cfgSection = builder.Configuration.GetSection("SecretSection");
builder.Services.Configure<MySecretSection>(cfgSection);这将允许您使用Options模式访问该节的数据
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}");
}
}好的,但是在appsettings.json中,秘密数据绝对不应该公开给公众。
如果您愿意,您可以做dotenv所做的事情,只需为每个秘密创建环境变量。
myUsername。CatOnKeyboard。就是这样。Asp.Net将自动获取那些环境变量,根据命名约定,这些变量表示分层密钥SecretSection:Username和SecretSection:Password。
对更新2的响应
要在c#或.netcode项目中快速执行同样的操作,我必须有一个bash脚本来设置环境变量,每次都会对其进行调整,并跟踪/调试我的应用程序。
不是的。为什么?使用.env做同样的事情,但是文件将是launch.json。而且你也是这样做的:不断地调整和运行,不涉及脚本。是因为您不知道可以在launch.json (VS代码)/launchSettings.json (Visual )中设置环境变量吗?
对更新3的响应
我明白你说的了。现在,我将正式欢迎您来到远超的.Net配置系统。
您可以看到,您生活在NodeJS世界中,配置包非常有限(dotenv),而.Net为您提供了一个非常、非常优越的配置系统。
您想避免编写脚本吗?您想要只更新一个文件并重新运行,不重新编译并且不绑定到IDE吗?.Net支持您:在appsettings.json或appsettings.<environment>.json中进行调整并重新启动。如果您愿意,您甚至可以避免重新启动,如果您调整配置的配置。
Side :我为您的JavaScript需求(服务器和浏览器)创建了一个配置包,它模仿.Net提供的内容:wj-config
发布于 2022-10-12 19:14:38
如果您正在使用.Net应用程序,那么您可以在本地使用User secrets。这将不会被签入,因为文件不是解决方案的一部分,甚至不需要将其保存在gitignore中。
用法:在Visual中,右键单击解决方案资源管理器中的项目,然后从上下文菜单中选择。
有关更多细节,请参阅https://learn.microsoft.com/en-us/aspnet/core/security/app-secrets?view=aspnetcore-6.0&tabs=windows
https://stackoverflow.com/questions/74046813
复制相似问题