.NET Core如何使用不同的环境?

时间:2017-10-11 11:53:43

标签: asp.net-core json.net .net-core

我设法在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

4 个答案:

答案 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_ENVIRONMENTtest设置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)

据我所知,在项目&#34;环境变量&#34;中设置了EnvironmentName。

  • 右键单击该项目。
  • 属性。
  • 转到“调试”选项卡。
  • 更改&#34; ASPNETCORE_ENVIRONMENT&#34;的值到&#34;发展&#34;。

应该使用重建和appsettings.Development.json

Environment variables

或者在Azure上:

  • 转到您的应用
  • 点击&#34;应用程序设置&#34;
  • 在标题&#34;应用程序设置&#34;你可以添加&#34; ASPNETCORE_ENVIRONMENT&#34;