.Net-core配置拉连接字符串错误提供程序

时间:2018-06-10 05:02:20

标签: c# configuration .net-core

我正在尝试为我的.Net-core 2应用程序设置环境配置。我有2个appSettings配置。

appSettings.json

"ConnectionStrings": {
  "DefaultConnection": "Server=staging.com;Database=staging;User Id=staging;Password=pwd"
}

appsettings.development.json

"ConnectionStrings": {
  "DefaultConnection": "Server=localhost;Database=staging;User Id=local;Password=pwd"
}

在我的Startup.cs中,我的配置设置如下:

public Startup(IHostingEnvironment env)
{
    var builder = new ConfigurationBuilder()
        .SetBasePath(env.ContentRootPath)
        .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
        .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
        .AddEnvironmentVariables();
    Configuration = builder.Build();
}

当我去抓取连接字符串时。

var connectionString = Configuration.GetConnectionString("DefaultConnection");

这将返回 appsettings.json 中的那个而不是 appsettings.development.json 但是当我检查这是否是开发环境env.IsDevelopment()时返回true

如何从配置中获取正确的连接字符串?

1 个答案:

答案 0 :(得分:2)

  

这将返回staging而不是开发。然而,当我检查这是否是开发环境env.IsDevelopment()时,它会返回true

您正在获得开发配置,因为您仍处于开发环境中,这就是env.IsDevelopment()返回true的原因。

要告诉ASP.Net Core您处于Staging环境中,您需要通过项目属性配置它并设置环境属性。

转到Debug标签,然后确保环境变量部分 ASPNETCORE_ENVIRONMENT 设置为暂存,如下所示:

enter image description here

这样做env.IsDevelopment()将返回falseenv.IsStaging()将返回true。因此 appsettings.development.json 不会包含在您的配置中。

由于没有 appsettings.staging.json ,您将获得 appseting.json 设置,然后是您正在寻找的DefaultConnection

旁注:您应为Staging环境创建单独的文件 appsettings.staging.json ,因为 appseting.json 应仅包含常见配置适用于所有环境。每个环境 appsettings。[environment] .json 都应添加新设置或覆盖常用设置。

旁注:确保ConnectionStrings部分的路径位于根级