ASP.NET Core如何为开发,登台和生产环境设置变量

时间:2019-01-21 09:37:37

标签: c# asp.net asp.net-core

这是我当前的项目结构

  1. CentralRepo(存储多个appsettings.json文件)
  2. AppOne(AppOne引用CentralRepo以便读取appsettings.json文件)

示例(Program.cs):

public static IConfiguration Configuration { get; } = new ConfigurationBuilder()
.SetBasePath(ConfigurationManager.GetBasePath(Environment.GetEnvironmentVariable("CENTRAL_REPO")))
.AddJsonFile("apponesettings.json", optional: false, reloadOnChange: true)
.Build();

public static void Main(string[] args)
{
    var logger = NLog.Web.NLogBuilder.ConfigureNLog("NLog.config").GetCurrentClassLogger();
    var connectionString = Configuration["DatabaseConfiguration:ConnectionString"];
    LogManager.Configuration.Variables["connectionString"] = connectionString;
    try
    {
        logger.Debug("init main");
        BuildWebHost(args).Run();
    }
    catch (Exception ex)
    {
        //NLog: catch setup errors
        logger.Error(ex, "Stopped program because of exception");
        throw;
    }
    finally
    {
        // Ensure to flush and stop internal timers/threads before application-exit (Avoid segmentation fault on Linux)
        NLog.LogManager.Shutdown();
    }
}

我当前正在使用环境变量来设置我的CENTRAL_REPO路径。但是,我意识到,将其部署到开发服务器时,只能有一个具有该名称的环境变量。如何更改此设置,以便可以进行开发,登台和生产?

除了使用环境变量,还有其他方法吗?

我了解了web.config文件,但是不确定如何在其中设置变量,然后从我的代码中调用它。

3 个答案:

答案 0 :(得分:2)

您可以在不同的json文件中为每个环境设置环境变量,如下所示;

enter image description here

并在Startup.cs处获取变量,如下所示:

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

答案 1 :(得分:0)

还可以在profiles的{​​{1}}部分中设置环境变量。寻找launchSettings.json,然后寻找environmentVariables

请注意,可以有多个实例。我不确定要更改哪个配置文件,所以我总是将它们全部更改:

ASPNETCORE_ENVIRONMENT

答案 2 :(得分:-1)

您可以像这样在web.config with this manual中设置环境变量:

<aspNetCore processPath="dotnet"
      arguments=".\MyApp.dll"
      stdoutLogEnabled="false"
      stdoutLogFile="\\?\%home%\LogFiles\stdout"
      hostingModel="InProcess">
  <environmentVariables>
    <environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Development" />
    <environmentVariable name="CONFIG_DIR" value="f:\application_config" />
  </environmentVariables>
</aspNetCore>