我有一个 ASP.NET Core 8 Web API 项目,其中包含以下设置文件:
appsettings.json
appsettings.Local.json
按照此处的说明,我还有一个测试项目来运行内存测试服务器。到目前为止只有这个配置:
var factory = new WebApplicationFactory<Program>()
.WithWebHostBuilder(builder =>
{
builder.ConfigureServices(services =>
{
});
builder.ConfigureTestServices(services =>
{
});
builder.ConfigureAppConfiguration(config =>
{
config.AddConfiguration(Configuration);
});
});
问题是当测试项目运行内存测试服务器时。它从 ASP.NET Core Web API 项目中获取 appsetting.json
而不是
appsettings.Local.json
文件。
var builder = WebApplication.CreateBuilder(args);
//...some services registration here
builder.Cofiguration["ConnectionsStrings:MyData"] // This reads the value from "appsettings" instead "appsettings.Local"
var app = builder.Build();
如何配置测试项目,以便 Program.cs
加载
appsettings.Local.json
值?
webconfig
文件配置为此答案。如何使用不同的appsettings.json文件进行不同的部署?
<environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Local" />
要选择本地,请将ASPNETCORE_ENVIRONMENT
中的
launchSettings.json
更改为本地。还有一些配置可以更灵活地控制
appsettings
的选择。
builder.ConfigureAppConfiguration((context, config) =>
{
config.Sources.Clear();
config.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true);
config.AddJsonFile("appsettings.Local.json", optional: true, reloadOnChange: true);
config.AddEnvironmentVariables();
});
这将使 appsettings.json
成为默认值,覆盖其他文件,并且如果未在其他文件中配置,则保持设置与
appsettings.json
中配置的设置保持相同。