Asp.net core 如何在同一台机器上配置多个ASPNETCORE_环境?
我有ASP.NET核心web应用程序。我已经在web服务器上配置了web应用程序,并将Asp.net core 如何在同一台机器上配置多个ASPNETCORE_环境?,asp.net-core,asp.net-core-mvc,.net-core,coreclr,Asp.net Core,Asp.net Core Mvc,.net Core,Coreclr,我有ASP.NET核心web应用程序。我已经在web服务器上配置了web应用程序,并将ASPNETCORE\u环境变量设置为Development。我在机器级别设置了这个变量,如下图所示。 现在,在同一台机器上,我想配置同一web应用程序的另一个实例作为Stagingenvironment 我在这里有哪些选项可以在应用程序级别而不是机器级别设置ASPNETCORE\u环境?所以我可以在同一台机器上托管同一应用程序的多个实例 您有两个选择 以不同的用户身份运行每个应用程序,并在该用户配置文件中设
ASPNETCORE\u环境
变量设置为Development
。我在机器级别设置了这个变量,如下图所示。
现在,在同一台机器上,我想配置同一web应用程序的另一个实例作为Staging
environment
我在这里有哪些选项可以在应用程序级别而不是机器级别设置ASPNETCORE\u环境
?所以我可以在同一台机器上托管同一应用程序的多个实例
您有两个选择
能否更改web服务器上运行的代码解析配置?我建议你这么做。这将允许您在Windows设置中更自然地配置环境 传统的配置
IHostingEnvironment.EnvironmentName
变量的方法是通过ASPNETCORE\u 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();
}
从这里开始,我将对其进行更改,以便它可以在使用ASPNETCORE\uu
前缀环境变量的同时使用命令行。这将允许您轻松地使用所需的任何环境名称运行应用程序,如下所示:
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();
}
现在,
ASPNETCORE\u环境
环境变量仍将受到尊重,但您可以在进行本地开发时通过命令行覆盖它。需要注意的是,如果您还没有将Microsoft.Extensions.Configuration.CommandLine
nuget包包含到project.json
文件中,以获取AddCommandLine()
扩展方法。为了补充解决方案#1:1.1创建一个新用户,1.2登录并转到用户帐户-1.3单击“设置环境变量”,1.4登录回主用户并转到IIS,1.5选择要更改的网站池,1.6设置用户,1.7在“高级选项”中,设置“加载用户配置文件”=trueI二手解决方案2以及二手解决方案2。不知道您可以在IIS中为单个站点配置环境变量。非常有用。更新:发布时,环境变量将被删除。在发布配置文件中添加产品,部署过程将自动完成所有这些操作。您的项目是如何构建和部署的?也许您可以考虑在项目构建或部署期间将系统环境前缀传递给系统。因此,他们可以使用不同的环境变量前缀来获取环境值。我一直在查看您在堆栈上的帖子和评论,我也很难理解为什么从visual studio发布时无法指定目标环境…:/我真的不想像在生产环境中那样使用命令来运行我的应用程序。应用程序正在IIS下运行。我使用@blowdart第二个解决方案dotnet运行不一定是每个人都在使用的运行应用程序。因此,例如,当在IIS上托管或仅在kestrel后面直接创建进程时,这种方法就会崩溃。
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 environment=development
dotnet run environment=staging