【发布时间】:2020-01-07 08:28:52
【问题描述】:
我正在使用 .NET Core 2.2,默认模板并尝试使用 UseSetting 覆盖配置,但是我无法使其正常工作。在配置中设置的测试值到文件,我想在代码中用相同的值覆盖它,然后在启动中我想获得覆盖的值。
(最初我试图添加 AzureKeyVaultProvider,但它对我不起作用,我以这个示例结束)
配置:
{
"Logging": {
"LogLevel": {
"Default": "Warning"
}
},
"AllowedHosts": "*",
"Test": "file"
}
程序.cs:
public class Program
{
public static void Main(string[] args)
{
CreateWebHostBuilder(args).Build().Run();
}
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>()
.UseSetting("Test", "code");
}
Startup.cs:
public class Startup
{
private readonly IConfiguration _configuration;
public Startup(IConfiguration configuration)
{
_configuration = configuration;
}
public void ConfigureServices(IServiceCollection services)
{
var value = _configuration.GetValue<string>("Test");
}
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
app.Run(async (context) =>
{
await context.Response.WriteAsync("Hello World!");
});
}
}
【问题讨论】:
-
UseSetting适用于 host 配置,该配置在应用程序配置之前应用。你需要连接到ConfigureAppConfiguration。 -
@KirkLarkin 最初我试图覆盖配置:WebHost.CreateDefaultBuilder(args).UseConfiguration(configuration),我希望这是覆盖配置的方式,但是当我检查源代码@987654328 @ 只是迭代配置键并为每个配置键调用 UseSetting。这就是为什么我希望 UseSetting 覆盖配置,而不仅仅是主机配置
-
甚至在此之前,我试图根据此示例添加 AzureKeyVault:github.com/dotnet-architecture/eShopOnContainers/blob/dev/src/…。正在检索值,但不覆盖配置文件
-
这不是我的问题的答案,因为我想使用
UseConfiguration扩展名覆盖配置,如下所示:WebHost.CreateDefaultBuilder(args).UseConfiguration(configuration),但它解决了我原来的问题,所以我接受它 -
问题还是一样,因为
UseConfiguration也适用于主机 正如你所说,它只是结束了UseSetting。主机配置被复制到应用程序配置中,因此它通常可以工作,您示例中的 JSON 文件会覆盖这些值。
标签: c# .net asp.net-core .net-core configuration