这是我当前的项目结构
示例(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文件,但是不确定如何在其中设置变量,然后从我的代码中调用它。
答案 0 :(得分:2)
您可以在不同的json文件中为每个环境设置环境变量,如下所示;
并在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>