【问题标题】:Strange IConfiguration passing to Startup module奇怪的 IConfiguration 传递给启动模块
【发布时间】:2018-08-06 19:40:14
【问题描述】:

我有一个 ASP.NET Core 应用程序,它在 Program.cs 文件中构建自定义配置(“Main”方法。)就是这样构建的:

var configuration = new ConfigurationBuilder()
        .SetBasePath(Directory.GetCurrentDirectory())
        .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)

        // custom config file
        .AddJsonFile("custom.json", optional: false, reloadOnChange: false)
                .Build();

    BuildWebHost(args, configuration).Run();

发生的情况是,在 BuildWebHost 调用配置正确包含两部分 - appsettings.json 和 custom.json。

当我在 Startup 构造函数中捕获执行时,custom.json 配置消失了:它不存在。配置中有许多其他分支传递给 Startup ctor,但没有 custom.json 分支。

我可能做错了什么?

更新:

public static IWebHost BuildWebHost(string[] args, IConfiguration config)
{
    var ret = WebHost.CreateDefaultBuilder(args)
        .UseConfiguration(config)
        .UseStartup<Startup>()
        .Build();

    return ret;
}

UPDATE 2(启动构造函数):

public Startup(IConfiguration configuration)
{
    this.Configuration = configuration;
}

【问题讨论】:

  • 您是否检查了custom.json 文件上的属性以确保它的Copy to Output 设置是Copy AlwaysCopy if newer
  • 是的,它不影响它。目前它设置为“构建操作:内容”,“复制到输出目录:始终复制”
  • 我怀疑你的 configuration 变量没有被传递,或者你在传递到 Startup 类后没有正确分配它。它不是 API 的官方部分,但是如果您在启动时将鼠标悬停在您的 IConfiguration 上,它会为 _providers 列出什么?
  • 那里有 5 个提供程序:ChainedConfigurationProvider、2 个 JsonConfigurationProviders(它们都不是我的 custom.json)、EnvironmentVariablesConfigurationProvider 和 CommandLineConfigurationProvider。
  • 如果您的Startup 类存在,并且您在任何地方设置 IConfiguration 成员,您能否发布它的构造函数?

标签: c# asp.net-core configuration


【解决方案1】:

我还没有弄清楚为什么Program 中的UseConfiguration 不起作用,也没有说明何时/如何使用它。但是,您可以将UseConfiguration 替换为ConfigureAppConfiguration 以附加到CreateDefaultBuilder 添加的默认提供程序列表中。

例如:

public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
        WebHost.CreateDefaultBuilder(args)
            .ConfigureAppConfiguration(builder => builder
                .AddJsonFile("foo.json"))
            .UseStartup<Startup>();

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2020-10-19
  • 2020-10-06
  • 2016-02-23
  • 2014-05-24
  • 1970-01-01
  • 1970-01-01
  • 2016-10-22
  • 1970-01-01
相关资源
最近更新 更多