zoukankan      html  css  js  c++  java
  • 《ASP.NET Core 高性能系列》环境(EnvironmentName)的设置

    一、概述

      程序启动时Host捕获到环境相关数据,然后交由IEnvironment(传说要作废,但是觉得这个设计依旧前后矛盾,因为没有考虑好非Web 和Web区分),然后交由IWebHostEnvironment,对于ASP.NET Core环境而言,同样会存储在

    IWebHostEnvironment.EnvironmentName,ASP.NET Core框架自身提供Development、Staging、Production三种状态作为EnvironmentName的值,

    public interface IWebHostEnvironment : Microsoft.Extensions.Hosting.IHostEnvironment
    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }
        if (env.IsProduction() || env.IsStaging() || env.IsEnvironment("Staging_2"))
        {
            app.UseExceptionHandler("/Error");
        }
    }

    二、开发建议

      建议为不同的环境定义不同的Startup类,让ASP.NET Core根据自身环境的不同,加载不同的Startup{EnvironmentName}文件,例如

    开发环境会加载StartupDevelopment.cs文件,线上环境加载StartupProduction.cs文件

      Program.cs中对于Startup的加载代码需要采用程序集的方式进行加载.

      public class Program
        {
            public static void Main(string[] args)
            {
                CreateHostBuilder(args).Build().Run();
            }
            public static IHostBuilder CreateHostBuilder(string[] args) =>
                Host.CreateDefaultBuilder(args)
                    .ConfigureWebHostDefaults(webBuilder =>
                    {
                        var assemblyName = typeof(Startup).GetTypeInfo().Assembly.FullName;
                        webBuilder.UseStartup(assemblyName);
                    });
        }

    三、设定IWebHostEnvironment.EnvironmentName

    1.开发阶段,我们可以通过项目的 PropertieslaunchSettings.json 进行设置

    {
      "iisSettings": {
        "windowsAuthentication": false, 
        "anonymousAuthentication": true, 
        "iisExpress": {
          "applicationUrl": "http://localhost:63327",
          "sslPort": 44365
        }
      },
      "profiles": {
        "IIS Express": {
          "commandName": "IISExpress",
          "launchBrowser": true,
          "environmentVariables": {
            "ASPNETCORE_ENVIRONMENT": "Development"
          }
        },
        "LearnAspCore": {
          "commandName": "Project",
          "launchBrowser": true,
          "applicationUrl": "https://localhost:5001;http://localhost:5000",
          "environmentVariables": {
            "ASPNETCORE_ENVIRONMENT": "Production"
          }
        }
      }
    }

    使用 dotnet run 启动应用时:
    如果可用,读取 launchSettings.json 。 launchSettings.json 中的 environmentVariables 设置会替代环境变量 。
    此时显示承载环境。

    交互示例:

    PS C:WebsitesEnvironmentsSample> dotnet run
    Using launch settings from C:WebsitesEnvironmentsSamplePropertieslaunchSettings.json...
    Hosting environment: Development
    Content root path: C:WebsitesEnvironmentsSample
    Now listening on: http://localhost:54340
    Application started. Press Ctrl+C to shut down.

    2.VSCode

    使用 Visual Studio Code 时,还可以在 .vscode/launch.json 文件中设置环境变量 。 以下示例将环境设置为 Development

    {
       "version": "0.2.0",
       "configurations": [
            {
                "name": ".NET Core Launch (web)",
                "env": {
                    "ASPNETCORE_ENVIRONMENT": "Development"
                }
            }
        ]
    }

     在没有 launchSettings.json 文件的 Development 环境中启动应用时,可以使用环境变量设置环境或者将命令行来启动

    3.如何设置环境变量

    1) Windows下当前窗口下有效的方式

    a.当前cmd窗口下有效

    set ASPNETCORE_ENVIRONMENT=Development  //通过set ASPNETCORE_ENVIRONMENT 查看

    b.当前powershell下有效

    $Env:ASPNETCORE_ENVIRONMENT = "Development"

    2) Windows全局设置的方式

    a.“控制面板” >“系统” >“高级系统设置进行设置环境变量

    b.cmd命令

    setx ASPNETCORE_ENVIRONMENT Development /M  // /M表示是否是整台机器,如果没有表示当前用户

    c.powershell

    [Environment]::SetEnvironmentVariable("ASPNETCORE_ENVIRONMENT", "Development", "Machine")

      Machine 选项值指明,在系统一级设置环境变量。 如果将选项值更改为 User,就会为用户帐户设置环境变量。

     3)类Unix系的设置方式

    export ASPNETCORE_ENVIRONMENT=Development
    

      如果要全局生效,请加到相应配置文件中,如下Centos的配置方式

    修改/etc/profile文件,此文件是所有用户公用文件,修改可以使环境变量对所有用户生效。 如果要当前用户,则修改~/.bash_profile
    
    在文件末尾加上如下两行代码
    
    export ASPNETCORE_ENVIRONMENT=Development
    
    最后:执行 命令
    
    source /etc/profile
    使其修改生效,执行完可通过
    
    echo $ASPNETCORE_ENVIRONMENT=Development
    命令查看是否添加成功。

    4)其他设置方式

      发布后的程序默认是Production模式的,如果设置了环境变量,就以环境变量为准;我们还可以通过以下方式在代码中强制指定运行环境是什么.

    Host.CreateDefaultBuilder(args)
    .UseEnvironment("Development")

    除此之外,.NET Core还可以在IIS ,IIS程序池,Azure中对EnvironmentName进行设置

    四、设置了EnvironmentName为了啥

      简而言之,可以让我们的程序在不同的EnvironmentName下运行不一样的代码。通常不同的环境,我们需要加载不一样的配置,

    这是都可以通过EnvironmentName来灵活指定.另外有一些额外知识,如第二段提到那样,ASP.NET Core根据自身环境的不同,加载不同的Startup{EnvironmentName}文件,例如开

    发环境会加载StartupDevelopment.cs文件,线上环境加载StartupProduction.cs文件,

    不仅如此,同一个Startup,我们可以指定不同的Configure{EnvironmentName}Services,Configure{EnvironmentName} 方法,系统会自动进行加载判断使用哪个

    Configure,ConfigureServices

  • 相关阅读:
    nyoj256-C小加之级数求和
    nyoj254-编号统计
    nyoj286-动物统计
    最长回文子串——manacher
    动态规划:Codeforces Round #427 (Div. 2) C Star sky
    水题:51Nod1432-独木舟
    水题:HDU1716-排列2
    水题:CF16C-Monitor
    数学基础:HUD1124-Factorial(N!末尾0的个数)
    并查集:POJ1182-食物链(并查集比较高端的应用)
  • 原文地址:https://www.cnblogs.com/humble/p/12290976.html
Copyright © 2011-2022 走看看