c# - launchSettings.json 和 appSettings.json 是如何工作的?
问题描述
当创建一个新的 .NET Core 项目时,Rider 会为我生成一个launchSettings.json
,appSettings.json
和appSettings.Development.json
文件。.NET Core 似乎能够自行处理这些配置,我无需自己编写任何代码。这些文件都不会被版本控制忽略。
.NET Core 对我来说是新的,我只知道 Node 后端。在 Node 中,我将安装dotenv
包,使用内容创建一个新.env
文件PORT=3000
,将.env
文件添加到我的 .gitignore 并通过process.env.PORT
我的代码访问端口。这些配置值只对我有用,因为它们不在版本控制范围内。
比较方法有一些我不明白的事情:
.env
文件应该远离版本控制,但这些文件不应该吗?敏感信息呢?还是我应该手动将它们添加到 .gitignore 中?从这里开始,明确建议避免使用多个配置文件。
在十二因素应用程序中,环境变量是精细控件,每个控件都与其他环境变量完全正交。它们从不组合为“环境”,而是为每个部署独立管理。这是一个随着应用程序在其生命周期内自然扩展到更多部署而平滑扩展的模型。
那么删除
appSettings.Development.json
文件并坚持使用不是更好appSettings.json
吗?launchSettings.json
包含有关应用程序配置的信息(例如"applicationUrl": "https://localhost:5001;http://localhost:5000",
)并由版本控制获取。如果我想更改端口或其他设置怎么办?而且由于您知道这是一个 json 文件,因此我将无法为 env 变量添加占位符,例如http://{{baseUrl}}:{{port}}
. 如何处理?- 配置
launchSettings.json
文件有一个environmentVariables
带有初始值的部分,"ASPNETCORE_ENVIRONMENT": "Development"
但那的目的是appSettings.json
什么?
我认为事情比看起来容易,但这个概念让我感到困惑。有人介意解释一下吗?
解决方案
虽然我不知道 .env 文件,但我对其余文件的回答如下:
当您拥有 appsettings.json 和 appsettings.development.json 并在 ASPNETCORE_ENVIRONMENT 中指定您正在运行开发时,appsettings.development.json 中的设置应覆盖 appsettings.json 中的设置,而未覆盖的设置将从 appsettings 中读取。 json。然而,我几乎总是使用仅包含 {} 的 appsettings.json,然后使用 appsettings.production.json 和 appsettings.development.json 来明确说明哪些设置在哪里。
关于安全性,我认为其目的是将机密添加到 CD 系统中,例如 Octopus deploy 或 teamcity,然后在部署解决方案时将占位符机密交换为真实机密。
Launchsettings.json 只涉及在本地运行项目而不发布,无论是通过 Rider 还是 Visual Studio,它都会告诉系统是否启动浏览器以及在哪个 url 上找到应用程序,端口只是默认值,可以在代码中覆盖,然后您必须匹配启动设置中新选择的端口才能按预期进行调试。
我希望这是有道理的。
推荐阅读
- ios - 带有时区的 iOS 14 上的 UIDatePicker Apple Bug?
- continuous-integration - 是否可以触发对不同存储库的 GitHub 操作?
- perl - 更新一个或多个数组的哈希值
- python - 如何通过多进程共享(或排除共享)全局变量?
- c# - 如何从 ViewModel 更改样式属性?
- r - 将日期汇总到不同的组中
- node.js - 在带有 Nginx 服务器和 PM2 的 Ubuntu 上使用 React 前端服务 Express 后端
- excel - VBA vlookup 从关闭的工作簿中获取数据
- arrays - json.Unmarshal 是否维护 JSON 数组的顺序
- c - c语言中long long的数学运算