[英]how to override value in appsettings.json file between 2 different projects using .NETCore
[英]How to override appsettings.json for different OS?
我的项目是简单的 WebApi 服务器,基于 netcoreapp2.0。
我有简单的appsettings.json
{
"logPath":"C:\logs\myLog.log"
}
如果应用程序可以在 Windows 平台上运行,那么它的logPath
可以,但我也想在 linux 上运行它。 我知道,我可以使用控制台参数或环境变量来覆盖此设置,但我想为appsettings.json
获取特定于操作系统的覆盖。 类似于appsettings.linux.json
(可能是 appsettings 文件,取决于 RID)的内容
{
"logPath":"\var\tmp\myLog.log"
}
理想情况下,如果这个理论上的appsettings.linux.json
只包含在构建输出中,如果我将为特定的 RID 构建我的应用程序。
如果可用,我该怎么做?
您可以创建多个 appsettings 文件。
appsettings.windows.json
appsettings.linux.json
然后使用 EnvironmentName 变量在它们之间交换。
启动
var builder = new ConfigurationBuilder()
.SetBasePath(env.ContentRootPath)
.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
.AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true, reloadOnChange: true);
如果设置了 {env.EnvironmentName},则首先加载默认的 appsettings.json 文件,然后它将加载该文件。 我用它在开发、测试和生产环境之间进行交换。
添加包含需要为此操作系统覆盖的变量的appsettings.linux.json
:
{
"logPath":"\var\tmp\myLog.log"
}
在调用config.Build()
之前在Program.cs
运行:
if(RuntimeInformation.IsOSPlatform(OSPlatform.Linux))
{
config.AddJsonFile("appsettings.linux.json");
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.