ASPNETCORE_ENVIRONMENT开发环境,appsettings.Development.json未加载。

4
在我的项目中,我有以下文件: appsettings.json 和 appsettings.Development.json。 因此,想法是在开发环境中加载文件 appsettings.Development.json,并在生产环境中加载 appsettings.json。 在 launchSettings.json 中,我将 ASPNETCORE_ENVIRONMENT 更改为 Development:
"profiles": {
    "IIS Express": {
      "commandName": "IISExpress",
      "launchBrowser": true,
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      }
    }
  }

这个工作符合预期:

env.IsDevelopment() is true

appsettings 是这样加载的:

var config = new ConfigurationBuilder().SetBasePath(Directory.GetCurrentDirectory())
                .AddJsonFile("appsettings.json", true, true)
                .Build();

但仍然所有的值都是从 appsettings.json 中加载而不是 appsettings.Development.json。

我也尝试了:

var config = new ConfigurationBuilder().SetBasePath(Directory.GetCurrentDirectory())
                .AddJsonFile("appsettings.json", true, true)
                .AddJsonFile("appsettings.Development.json", true, true)
                .Build(); 

但是在这种情况下,值始终从最后一个文件appsettings.Development.json加载,即使:

env.IsDevelopment() is false

查看.NET 6的内容:https://dev59.com/QFd1hooBIXSAPYfQ73s_ - Ash K
1个回答

6
你需要组合该环境特定设置文件的名称,而不是设置一个固定的文件。
$"appsettings.{env.EnvironmentName}.json"

对于开发环境,文件名为appsettings.Development.json
对于生产环境,文件名为appsettings.Production.json

如果没有这样的文件,则只使用appsettings.json,因为您在AddJsonFile调用中设置了optional: true

.AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true, true)

为了避免没有任何设置,您可能希望将appsettings.json文件设为必需文件。

.AddJsonFile("appsettings.json", optional: false, true)

var config = new ConfigurationBuilder()
    .SetBasePath(Directory.GetCurrentDirectory())
    .AddJsonFile("appsettings.json", optional: false, true)
    .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true, true)
    .Build();

是的,经过一些研究,我发现创建该项目的人在每次想要从配置文件获取特定值时都创建了一个ConfigurationBuilder实例,这是错误的。所以我改为在控制器中注入IConfiguration并将其传递给服务类,框架通过从ASPNETCORE_ENVIRONMENT中提取EnvironmentName来管理它,并删除了所有的AddJsonFile方法。 - KARIM Yassine

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接