我的项目是简单的WebApi服务器,基于netcoreapp2.0。
我有简单的appsettings.json
{
"logPath":"C:\logs\myLog.log"
}
这是logPath
好的,如果应用程序可以在Windows平台上运行,但我也想在linux上运行它。我知道,我可以使用控制台args或环境变量来覆盖此设置,但我希望获得appsettings.json
的操作系统特定覆盖。类似appsettings.linux.json
(可能是appsettings文件,取决于RID)和内容
{
"logPath":"\var\tmp\myLog.log"
}
理想情况下,如果此理论appsettings.linux.json
仅包含在构建输出中,如果我将为特定RID构建我的应用程序。
如果可以,我该怎么办?
答案 0 :(得分:3)
您可以创建多个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文件,然后加载该文件。我用它在Dev,测试和生产环境之间进行交换。
答案 1 :(得分:0)
添加 appsettings.linux.json
包含需要为此操作系统覆盖的变量:
{
"logPath":"\var\tmp\myLog.log"
}
在调用 Program.cs
之前在 config.Build()
中运行:
if(RuntimeInformation.IsOSPlatform(OSPlatform.Linux))
{
config.AddJsonFile("appsettings.linux.json");
}