Asp.net core 如何在同一台机器上配置多个ASPNETCORE_环境?

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环境?所以我可以在同一台机器上托管同一应用程序的多个实例 您有两个选择 以不同的用户身份运行每个应用程序,并在该用户配置文件中设

我有ASP.NET核心web应用程序。我已经在web服务器上配置了web应用程序,并将
ASPNETCORE\u环境
变量设置为
Development
。我在机器级别设置了这个变量,如下图所示。 现在,在同一台机器上,我想配置同一web应用程序的另一个实例作为
Staging
environment

我在这里有哪些选项可以在应用程序级别而不是机器级别设置
ASPNETCORE\u环境
?所以我可以在同一台机器上托管同一应用程序的多个实例


您有两个选择

  • 以不同的用户身份运行每个应用程序,并在该用户配置文件中设置环境变量。这会给你额外的安全奖励。您必须设置应用程序池以加载用户配置文件

  • 使用IIS配置

  • 启动IIS管理器
  • 选择“配置编辑器”下拉该部分 组合框并选择system.webServer/aspNetCore
  • 从 组合框并选择Applicationhost.config
  • 点击 environmentVariables元素并单击。。。按钮隐藏在 第二列,在右边
  • 设置环境变量
  • 退出环境变量屏幕,然后单击应用
  • 重新启动应用程序池/应用程序

  • 能否更改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