如何在同一台机器上配置多个ASPNETCORE_ENVIRONMENT?
How to configure multiple ASPNETCORE_ENVIRONMENT on same machine?
我有 ASP.NET 核心网络应用程序。我已经在我们的 Web 服务器上配置了 Web 应用程序并将 ASPNETCORE_ENVIRONMENT
变量设置为 Development
。我在机器级别设置了这个变量,如下图所示。
现在在同一台机器上,我想再配置一个与 Staging
环境相同的 Web 应用程序实例。
在应用程序级别而不是机器级别设置 ASPNETCORE_ENVIRONMENT
我有哪些选择?所以我可以在同一台机器上托管同一应用程序的多个实例?
你有几个选择。
运行 每个应用程序作为不同的用户,并在该用户配置文件中设置环境变量。这给你一个很好的附加安全奖励。您必须设置应用程序池以加载用户配置文件。
使用 IIS 配置
- 启动 IIS 管理器
- 选择配置编辑器下拉部分
组合框并选择系统。webServer/aspNetCore
- 下拉从
组合框并选择 Applicationhost.config
- 点击
environmentVariables 元素并单击隐藏在中的 ... 按钮
第二列,在右边。
- 设置您的环境变量。
- 退出环境变量屏幕,然后单击应用。
- 重新启动应用程序 pool/app。
您可以更改 Web 服务器上的代码解析配置 运行ning 吗?这就是我建议做的。这将允许您在 Windows 设置中更自然地配置您的环境。
虽然配置 IHostingEnvironment.EnvironmentName
变量的传统方法是通过 ASPNETCORE_ENVIRONMENT
环境变量,但您可以更改 ASP.NET Core 解析其配置的方式,这样您就可以通过命令行参数设置变量。
具体细节...
默认情况下,dotnet new -t web
命令生成的 Program.cs
文件类似于以下内容:
public static void Main(string[] args) {
var host = new WebHostBuilder()
.UseKestrel()
.UseUrls("http://0.0.0.0:5000")
.UseContentRoot(Directory.GetCurrentDirectory())
.UseIISIntegration()
.UseStartup<Startup>()
.Build();
host.Run();
}
这使得 ASP.NET 核心使用 the default configuration processing (environment variables with a ASPNETCORE_
prefix) 来确定 IHostingEnvironment.EnvironmentName
的值,您正在使用它来配置您的应用程序 运行s.
幸运的是,您可以使用 UseConfiguration()
extension method on WebHostBuilder
改变 ASP.NET 核心解析配置的方式。下面是使用默认实现的自定义配置的示例:
public static void Main(string[] args) {
var configuration =
new ConfigurationBuilder()
.AddEnvironmentVariables("ASPNETCORE_")
.Build();
var host =
new WebHostBuilder()
.UseConfiguration(configuration)
.UseKestrel()
.UseUrls("http://0.0.0.0:5000")
.UseContentRoot(Directory.GetCurrentDirectory())
.UseIISIntegration()
.UseStartup<Startup>()
.Build();
host.Run();
}
从这里开始,我将对其进行更改,以便除了 ASPNETCORE_
前缀环境变量之外它还可以使用命令行。这将允许您轻松地 运行 您的应用程序使用您想要的任何环境名称,如下所示:
public static void Main(string[] args) {
var configuration =
new ConfigurationBuilder()
.AddEnvironmentVariables("ASPNETCORE_")
.AddCommandLine(args)
.Build();
var host =
new WebHostBuilder()
.UseConfiguration(configuration)
.UseKestrel()
.UseUrls("http://0.0.0.0:5000")
.UseContentRoot(Directory.GetCurrentDirectory())
.UseIISIntegration()
.UseStartup<Startup>()
.Build();
host.Run();
}
然后,当您使用 dotnet run
启动您的 dotnet 核心应用程序时,您可以在命令行上设置环境,如下所示:
dotnet run environment=development
dotnet run environment=staging
现在 ASPNETCORE_ENVIRONMENT
环境变量仍然有效,但您可以在进行本地开发时通过命令行覆盖它。请注意,您需要将 Microsoft.Extensions.Configuration.CommandLine
nuget 包包含到您的 project.json
文件中,如果您尚未这样做以获得 AddCommandLine()
扩展方法。
我有 ASP.NET 核心网络应用程序。我已经在我们的 Web 服务器上配置了 Web 应用程序并将 ASPNETCORE_ENVIRONMENT
变量设置为 Development
。我在机器级别设置了这个变量,如下图所示。
现在在同一台机器上,我想再配置一个与 Staging
环境相同的 Web 应用程序实例。
在应用程序级别而不是机器级别设置 ASPNETCORE_ENVIRONMENT
我有哪些选择?所以我可以在同一台机器上托管同一应用程序的多个实例?
你有几个选择。
运行 每个应用程序作为不同的用户,并在该用户配置文件中设置环境变量。这给你一个很好的附加安全奖励。您必须设置应用程序池以加载用户配置文件。
使用 IIS 配置
- 启动 IIS 管理器
- 选择配置编辑器下拉部分 组合框并选择系统。webServer/aspNetCore
- 下拉从 组合框并选择 Applicationhost.config
- 点击 environmentVariables 元素并单击隐藏在中的 ... 按钮 第二列,在右边。
- 设置您的环境变量。
- 退出环境变量屏幕,然后单击应用。
- 重新启动应用程序 pool/app。
您可以更改 Web 服务器上的代码解析配置 运行ning 吗?这就是我建议做的。这将允许您在 Windows 设置中更自然地配置您的环境。
虽然配置 IHostingEnvironment.EnvironmentName
变量的传统方法是通过 ASPNETCORE_ENVIRONMENT
环境变量,但您可以更改 ASP.NET Core 解析其配置的方式,这样您就可以通过命令行参数设置变量。
具体细节...
默认情况下,dotnet new -t web
命令生成的 Program.cs
文件类似于以下内容:
public static void Main(string[] args) {
var host = new WebHostBuilder()
.UseKestrel()
.UseUrls("http://0.0.0.0:5000")
.UseContentRoot(Directory.GetCurrentDirectory())
.UseIISIntegration()
.UseStartup<Startup>()
.Build();
host.Run();
}
这使得 ASP.NET 核心使用 the default configuration processing (environment variables with a ASPNETCORE_
prefix) 来确定 IHostingEnvironment.EnvironmentName
的值,您正在使用它来配置您的应用程序 运行s.
幸运的是,您可以使用 UseConfiguration()
extension method on WebHostBuilder
改变 ASP.NET 核心解析配置的方式。下面是使用默认实现的自定义配置的示例:
public static void Main(string[] args) {
var configuration =
new ConfigurationBuilder()
.AddEnvironmentVariables("ASPNETCORE_")
.Build();
var host =
new WebHostBuilder()
.UseConfiguration(configuration)
.UseKestrel()
.UseUrls("http://0.0.0.0:5000")
.UseContentRoot(Directory.GetCurrentDirectory())
.UseIISIntegration()
.UseStartup<Startup>()
.Build();
host.Run();
}
从这里开始,我将对其进行更改,以便除了 ASPNETCORE_
前缀环境变量之外它还可以使用命令行。这将允许您轻松地 运行 您的应用程序使用您想要的任何环境名称,如下所示:
public static void Main(string[] args) {
var configuration =
new ConfigurationBuilder()
.AddEnvironmentVariables("ASPNETCORE_")
.AddCommandLine(args)
.Build();
var host =
new WebHostBuilder()
.UseConfiguration(configuration)
.UseKestrel()
.UseUrls("http://0.0.0.0:5000")
.UseContentRoot(Directory.GetCurrentDirectory())
.UseIISIntegration()
.UseStartup<Startup>()
.Build();
host.Run();
}
然后,当您使用 dotnet run
启动您的 dotnet 核心应用程序时,您可以在命令行上设置环境,如下所示:
dotnet run environment=development
dotnet run environment=staging
现在 ASPNETCORE_ENVIRONMENT
环境变量仍然有效,但您可以在进行本地开发时通过命令行覆盖它。请注意,您需要将 Microsoft.Extensions.Configuration.CommandLine
nuget 包包含到您的 project.json
文件中,如果您尚未这样做以获得 AddCommandLine()
扩展方法。