我设法在Web应用程序中使用不同的环境。 在开发环境中,我需要处理不同的数据库连接。 我试图在下一个方向管理,但不幸的是不起作用。 appsettings.Development.json
{
"ConnectionStrings": {
"DefaultConnection": "Server=xxx.xx.xxx.xxx;Database=dbName;User Id=xxPassword=xxxxxxx;"
},
"Logging": {
"IncludeScopes": false,
"LogLevel": {
"Default": "Warning"
}
}
}
appsettings.json
{
"ConnectionStrings": {
"DefaultConnection": "Server=xxx.xx.xxx.xxx;Database=dbName;User Id=xxPassword=xxxxxxx;"
},
"Logging": {
"IncludeScopes": false,
"LogLevel": {
"Default": "Warning"
}
}
}
Startup.cs
public IHostingEnvironment environment;
public Startup(IHostingEnvironment env)
{
var builder = new ConfigurationBuilder()
.SetBasePath(env.ContentRootPath)
.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
.AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: false)
.AddEnvironmentVariables();
Configuration = builder.Build();
}
public IConfiguration Configuration { get; }
// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
if (environment.IsDevelopment())
{
services.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
}
else if (environment.IsProduction())
{
services.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
}
services.AddIdentity<ApplicationUser, IdentityRole>()
.AddEntityFrameworkStores<ApplicationDbContext>()
.AddDefaultTokenProviders();
// Add application services.
services.AddTransient<IEmailSender, EmailSender>();
services.AddScoped(typeof(IRepository<>), typeof(Repository<>));
services.AddTransient<DbInitializer>();
services.AddMvc();
}
使用我的代码,我在启动应用时遇到错误。 启动应用程序时出错。
一般的想法是我在开发环境中使用appsettings.Development.json
答案 0 :(得分:2)
你需要设置你的变数。然后你创建aditional appsettings..json文件。
所以你可能已经有了appsetings.json 我们通常还会创建一个appsettings.test.json和一个appsettings.prod.json。
在启动类中使用此代码,在构造函数中:
public Startup(IHostingEnvironment env, ILogger<Startup> logger)
{
var builder = new ConfigurationBuilder()
.SetBasePath(env.ContentRootPath)
.AddJsonFile("appsettings.json", true, true)
.AddJsonFile($"appsettings.{env.EnvironmentName}.json", true)
.AddEnvironmentVariables();
Configuration = builder.Build();
_logger = logger;
_logger.LogInformation($"Env: {env.EnvironmentName}");
}
你看到这一行:.AddJsonFile($"appsettings.{env.EnvironmentName}.json", true)
这个将覆盖现有设置。
例如;如果您使用azure托管您的应用,则需要使用ASPNETCORE_ENVIRONMENT
或test
设置prod
的应用设置..
或者您可以在项目的属性选项卡上设置它
喝彩!
答案 1 :(得分:1)
看起来你没有将ASPNETCORE_ENVIRONMENT变量设置为开发并使用配置文件$&#34; appsettings。{env.EnvironmentName} .json&#34;根据需要(可选:false)
如果从命令行运行应用程序,则需要设置此变量。
对于CMD:
set ASPNETCORE_ENVIRONMENT=Development
对于powershell:
$Env:ASPNETCORE_ENVIRONMENT = "Development"
如果从Visual Studio运行项目,则可以在&#34; Debug&#34;上设置此变量。项目属性选项卡。您只需要使用UI添加此环境变量。
答案 2 :(得分:0)
这是解决我问题的代码。
private IHostingEnvironment _env;
public Startup(IHostingEnvironment env)
{
_env = 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();
}
答案 3 :(得分:0)