如何默认不使用.Net中的appsettings.Production

问题描述 投票:0回答:1

我想默认使用测试服务器设置,并且仅在生产服务器时才使用生产设置。我遇到的问题是它完全忽略 DOTNET_ENVIRONMENT 变量并且始终使用 appsettings.Production.json 即使我手动告诉它。

应用程序设置.json

}
  "EnvTest": "Test"
}

appsettings.Production.json

}
  "EnvTest": "Production"
}

程序.cs

using Serilog;
using System.Runtime.InteropServices;



var builder = Host.CreateApplicationBuilder(args);
builder.Services.AddWindowsService(options =>
{
    options.ServiceName = "test";
});


builder.Environment.EnvironmentName = Environment.GetEnvironmentVariable("DOTNET_Environment") ?? "Default";

// If Production server overwrite default settings with production settings.
if(builder.Environment.IsProduction())
{
    builder.Configuration.AddJsonFile("appsettings.Production.json", optional: false, reloadOnChange: true);
}

Log.Information($"Starting service as {builder.Environment.EnvironmentName} with setting {builder.Configuration.GetValue<string>("EnvTest")} on {RuntimeInformation.FrameworkDescription}");

var host = builder.Build();
host.Run();

在设置的服务器上我得到 DOTNET_ENVIRONMENT="Test"

输出:

Starting service as Defaulted with setting Production on .NET 8.0.3

如何说服应用程序不使用生产设置?

尝试设置 DOTNET_ENVIRONMENT 变量并手动设置 builder.Environment.EnvironmentName

appsettings .net-8.0
1个回答
0
投票

找到了我的问题的解决方案:

builder.Configuration.Sources.Clear();
builder.Configuration.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true);

if (Environment.GetEnvironmentVariable("DOTNET_Environment") == "Production")
{
    builder.Configuration.AddJsonFile("appsettings.Production.json", optional: false, reloadOnChange: true);
}
else
{
    builder.Configuration.AddJsonFile("appsettings.Staging.json", optional: false, reloadOnChange: true);
}

关键是先清除自动读取的来源。 请注意,如果您使用开发环境或其他环境,您还需要手动添加它们。

© www.soinside.com 2019 - 2024. All rights reserved.