『ASP.NET Core高性能シリーズ』環境(EnvironmentName)の設定

7734 ワード

一、概説


プログラム起動時にHostは環境関連データをキャプチャし、IEnvironment(廃棄すると言われていますが、この設計は依然として矛盾していると思います.非WebとWebの区別を考慮していないためです)に渡し、IWebHostEnvironmentにASP.NET Core環境では、同様に
IWebHostEnvironment.EnvironmentName,ASP.NET Coreフレームワーク自体はDevelopment、Staging、Productionの3つの状態を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.開発段階では、プロジェクトの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:\Websites\EnvironmentsSample> dotnet run
Using launch settings from C:\Websites\EnvironmentsSample\Properties\launchSettings.json...
Hosting environment: Development
Content root path: C:\Websites\EnvironmentsSample
Now listening on: http://localhost:54340
Application started. Press Ctrl+C to shut down.

2.VSCode
Visual Studioコードを使用する場合は、vscode/launch.jsonファイルに環境変数を設定します.次の例では、環境をDevelopmentに設定します.
{
   "version": "0.2.0",
   "configurations": [
        {
            "name": ".NET Core Launch (web)",
            "env": {
                "ASPNETCORE_ENVIRONMENT": "Development"
            }
        }
    ]
}

そこにはない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で柔軟に指定できます.第2段で述べたようにASP.NET Coreは、独自の環境に応じて異なるStartup{EnvironmentName}ファイルをロードします.たとえば、
送信環境はStartupDevelopmentをロードします.csファイル、オンライン環境でStartupProductionをロードします.csファイル、
それだけでなく、同じStartupでは、異なるConfigure{EnvironmentName}Services、Configure{EnvironmentName}メソッドを指定できます.
Configure,ConfigureServices