aspnet核心appsettings.json加载

时间:2018-10-30 13:08:16

标签: .net-core asp.net-core-2.1 appsettings

我有一个具有appsettings.json的ASP.NET Core(2.1)项目。我使用WebHost.CreateDefaultBuilder()appsettings.json文件在“文件属性”中具有以下配置:

构建操作:内容
复制到输出目录:不要复制

构建完成后,appsettings.json会以bin\Debug\netcoreapp2.1\MyProj.runtimeconfig.json结尾。 ASP.NET Core运行时会很好地加载它。

我创建了WebJobs(针对.Net Core 2.1),并希望执行相同的操作-将“构建操作”设置为“内容”,然后将其加载。在Program.cs的Main()中,我有

这样的代码
var builder = new HostBuilder()
  ...
.ConfigureAppConfiguration(b =>
{
    var environment = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT");

    b.SetBasePath(Directory.GetCurrentDirectory());
    b.AddJsonFile("appsettings.json", false, true);
    b.AddJsonFile($"appsettings.{environment}.json", true, true);
    b.AddEnvironmentVariables();

    // Adding command line as a configuration source
    if (args != null)
    {
        b.AddCommandLine(args);
    }
}

但是运行时会尝试加载appsettings.json(而不是MyWebJobProj.runtimeconfig.json)。因此,我必须将“构建操作”设置为“无”,并将“复制到输出目录”设置为“始终”。 但是,我希望使用与ASP.NET Core中相同的方法-它以某种方式处理文件名转换。尽管WebHost.CreateDefaultBuilder()中的代码基本上与WebJob中的代码相同。魔术文件名转换在配置中有什么作用,为什么它仅在一种类型的项目中起作用?

1 个答案:

答案 0 :(得分:1)

文件IS (NOT) NULL[ProjName].runtimeconfig.json的含义完全不同。确保将appsettings.json复制到输出(将“复制到输出”设置为“总是”或“较新”)。