Iis Dotnet core-同一服务器上每个应用程序(进程)的环境变量
我们正在使用以下代码:Iis Dotnet core-同一服务器上每个应用程序(进程)的环境变量,iis,asp.net-core,Iis,Asp.net Core,我们正在使用以下代码: if(env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } 这在本地开发和生产环境中非常有效,但是我们的CI/QA环境中存在一个问题,它们位于同一台服务器上 我们希望能够指定类似这样的内容,但是如何为每个应用程序设置环境变量?如果CI和QA在不同的服务器上,这将很容易解决 if(env.IsEnvironment("CI")) { app.UseDeveloperExceptionPage
if(env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
这在本地开发和生产环境中非常有效,但是我们的CI/QA环境中存在一个问题,它们位于同一台服务器上
我们希望能够指定类似这样的内容,但是如何为每个应用程序设置环境变量?如果CI和QA在不同的服务器上,这将很容易解决
if(env.IsEnvironment("CI"))
{
app.UseDeveloperExceptionPage();
}
我们还希望每个环境都有特定的appsettings.json,比如appsettings.ci.json
和appsettings.qa.json
,我知道这是环境变量的开箱即用
我确信这一定是一种为每个应用程序(进程)指定环境变量的方法,我只是不知道怎么做?:)
我们正在使用IIS托管我们的应用程序。您可以覆盖
env.EnvironmentName
中的值,因为它具有公共setter,并且每个应用程序只能使用特定的环境变量组。假设APP1和APP2分别有两个变量,如APP1\u ownevironment=“QA”
、APP2\u ownevironment=“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);
因此,您可以通过类比创建自己的
IsQA()
扩展方法,或者直接调用env.IsEnvironment(“QA”)
我从dotnet核心松弛通道中的@davidfoll获得了帮助
解决方案是将以下内容添加到web.config
文件的aspNetCore
部分
<environmentVariables>
<environmentVariable name="ASPNETCORE_ENVIRONMENT" value="QA" />
<environmentVariable name="AnotherVariable" value="My Value" />
</environmentVariables>
环境变量是每个进程的,我想这是您想要的(CI和QA是同一个应用程序,但不同的进程)。但是,您的问题是两个进程都有相同的父进程(IIS),因此继承了相同的环境变量。感谢您的回答,我在@davidfowl的帮助下通过web.config解决了这个问题。看看我的答案。
<environmentVariables>
<environmentVariable name="ASPNETCORE_ENVIRONMENT" value="QA" />
<environmentVariable name="AnotherVariable" value="My Value" />
</environmentVariables>
<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>