我们使用以下代码:
if(env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
这在本地和生产中开发时效果很好,但我们在CI / QA环境中遇到问题,它们位于同一台服务器上。
我们希望能够指定类似的东西,但是我们如何为每个应用程序设置环境变量?如果CI和QA位于不同的服务器上,这很容易解决。
if(env.IsEnvironment("CI"))
{
app.UseDeveloperExceptionPage();
}
我们还希望为appsettings.ci.json
和appsettings.qa.json
这样的每个环境设置特定的appsettings.json,我知道这与环境变量开箱即用。
我确定它必须是一种为每个应用程序(进程)指定环境变量的方法,我只是不知道如何? :)
我们正在使用IIS来托管我们的应用程序。
答案 0 :(得分:2)
我从@davidfowl那里获得了dotnet核心冗余频道的帮助。
解决方案是将以下内容添加到aspNetCore
文件
web.config
部分
<environmentVariables>
<environmentVariable name="ASPNETCORE_ENVIRONMENT" value="QA" />
<environmentVariable name="AnotherVariable" value="My Value" />
</environmentVariables>
所以我的web.config
看起来像这样:
<aspNetCore processPath="%LAUNCHER_PATH%" arguments="%LAUNCHER_ARGS%" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" forwardWindowsAuthToken="false">
<environmentVariables>
<environmentVariable name="ASPNETCORE_ENVIRONMENT" value="QA" />
<environmentVariable name="AnotherVariable" value="My Value" />
</environmentVariables>
</aspNetCore>
答案 1 :(得分:1)
您可以覆盖env.EnvironmentName
中的值,因为它具有公共设置器,并且您可以仅为每个应用程序使用特定的环境变量组。假设app1和app2分别有2个变量,如APP1_OWNENVIRONMENT = "QA"
,APP2_OWNENVIRONMENT = "CI"
。
通过调用.AddEnvironmentVariables()
方法添加环境变量支持时,可以指定过滤器忽略没有特殊前缀的所有变量。例如
// APP1_ is the prefix that environment variable names must start with.
var config = new ConfigurationBuilder()
.AddCommandLine(args)
.AddEnvironmentVariables(prefix: "APP1_")
.Build();
env.EnvironmentName = config.GetValue<string>("OWNENVIRONMENT")};
// here env.EnvironmentName has "QA" value so the appsettings.qa.json will be used
var builder = new ConfigurationBuilder()
.SetBasePath(env.ContentRootPath)
.AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true);
IsDevelopment()
,IsStaging()
等方法只是IHostingEnvironment
的{{3}},它们是一般IsEnvironment
方法的包装器:
public static bool IsDevelopment(this IHostingEnvironment hostingEnvironment)
{
if (hostingEnvironment == null)
{
throw new ArgumentNullException(nameof(hostingEnvironment));
}
return hostingEnvironment.IsEnvironment(EnvironmentName.Development);
}
因此,您可以通过类比创建自己的IsQA()
扩展方法,或直接致电env.IsEnvironment("QA")
。