我正在尝试为我的.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
。
如何从配置中获取正确的连接字符串?
答案 0 :(得分:2)
这将返回staging而不是开发。然而,当我检查这是否是开发环境
env.IsDevelopment()
时,它会返回true
。
您正在获得开发配置,因为您仍处于开发环境中,这就是env.IsDevelopment()
返回true
的原因。
要告诉ASP.Net Core您处于Staging
环境中,您需要通过项目属性配置它并设置环境属性。
转到Debug
标签,然后确保环境变量部分 ASPNETCORE_ENVIRONMENT 设置为暂存,如下所示:
这样做env.IsDevelopment()
将返回false
,env.IsStaging()
将返回true
。因此 appsettings.development.json 不会包含在您的配置中。
由于没有 appsettings.staging.json ,您将获得 appseting.json 设置,然后是您正在寻找的DefaultConnection
。
旁注:您应为Staging环境创建单独的文件 appsettings.staging.json ,因为 appseting.json 应仅包含常见配置适用于所有环境。每个环境 appsettings。[environment] .json 都应添加新设置或覆盖常用设置。
旁注:确保ConnectionStrings
部分的路径位于根级