99re热这里只有精品视频,7777色鬼xxxx欧美色妇,国产成人精品一区二三区在线观看,内射爽无广熟女亚洲,精品人妻av一区二区三区

在 ASP.NET Core 中使用多個(gè)環(huán)境

2019-04-17 08:58 更新

環(huán)境

ASP.NET Core 在應(yīng)用啟動(dòng)時(shí)讀取環(huán)境變量 ASPNETCORE_ENVIRONMENT,并將該值存儲(chǔ)在 IHostingEnvironment.EnvironmentName 中。 ASPNETCORE_ENVIRONMENT 可設(shè)置為任意值,但框架支持三個(gè)值Development、Staging 和 Production。 如果未設(shè)置 ASPNETCORE_ENVIRONMENT,則默認(rèn)為 Production。

C#

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }

    if (env.IsProduction() || env.IsStaging() || env.IsEnvironment("Staging_2"))
    {
        app.UseExceptionHandler("/Error");
    }

    app.UseStaticFiles();
    app.UseMvc();
}

前面的代碼:

  • 當(dāng) ASPNETCORE_ENVIRONMENT 設(shè)置為 Development 時(shí),調(diào)用 UseDeveloperExceptionPage
  • 當(dāng) ASPNETCORE_ENVIRONMENT 的值設(shè)置為下列之一時(shí),調(diào)用 UseExceptionHandler:StagingProductionStaging_2

環(huán)境標(biāo)記幫助程序使用 IHostingEnvironment.EnvironmentName 的值來(lái)包含或排除元素中的標(biāo)記:

CSHTML

<environment include="Development">
    <div>&lt;environment include="Development"&gt;</div>
</environment>
<environment exclude="Development">
    <div>&lt;environment exclude="Development"&gt;</div>
</environment>
<environment include="Staging,Development,Staging_2">
    <div>
        &lt;environment include="Staging,Development,Staging_2"&gt;
    </div>
</environment>

在 Windows 和 macOS 上,環(huán)境變量和值不區(qū)分大小寫。 默認(rèn)情況下,Linux 環(huán)境變量和值要區(qū)分大小寫。

開(kāi)發(fā)

開(kāi)發(fā)環(huán)境可以啟用不應(yīng)該在生產(chǎn)中公開(kāi)的功能。 例如,ASP.NET Core 模板在開(kāi)發(fā)環(huán)境中啟用了開(kāi)發(fā)人員異常頁(yè)。

本地計(jì)算機(jī)開(kāi)發(fā)環(huán)境可以在項(xiàng)目的 Properties\launchSettings.json 文件中設(shè)置。 在 launchSettings.json 中設(shè)置的環(huán)境值替代在系統(tǒng)環(huán)境中設(shè)置的值。

以下 JSON 顯示 launchSettings.json 文件中的三個(gè)配置文件:

JSON

{
  "iisSettings": {
    "windowsAuthentication": false,
    "anonymousAuthentication": true,
    "iisExpress": {
      "applicationUrl": "http://localhost:54339/",
      "sslPort": 0
    }
  },
  "profiles": {
    "IIS Express": {
      "commandName": "IISExpress",
      "launchBrowser": true,
      "environmentVariables": {
        "ASPNETCORE_My_Environment": "1",
        "ASPNETCORE_DETAILEDERRORS": "1",
        "ASPNETCORE_ENVIRONMENT": "Staging"
      }
    },
    "EnvironmentsSample": {
      "commandName": "Project",
      "launchBrowser": true,
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Staging"
      },
      "applicationUrl": "http://localhost:54340/"
    },
    "Kestrel Staging": {
      "commandName": "Project",
      "launchBrowser": true,
      "environmentVariables": {
        "ASPNETCORE_My_Environment": "1",
        "ASPNETCORE_DETAILEDERRORS": "1",
        "ASPNETCORE_ENVIRONMENT": "Staging"
      },
      "applicationUrl": "http://localhost:51997/"
    }
  }
}

 備注

launchSettings.json 中的 applicationUrl 屬性可指定服務(wù)器 URL 的列表。 在列表中的 URL 之間使用分號(hào):

JSON

"EnvironmentsSample": {
   "commandName": "Project",
   "launchBrowser": true,
   "applicationUrl": "https://localhost:5001;http://localhost:5000",
   "environmentVariables": {
     "ASPNETCORE_ENVIRONMENT": "Development"
   }
}

使用 dotnet run 啟動(dòng)應(yīng)用時(shí),使用具有 "commandName": "Project" 的第一個(gè)配置文件。 commandName 的值指定要啟動(dòng)的 Web 服務(wù)器。 commandName 可為以下任一項(xiàng):

  • IISExpress
  • IIS
  • Project(啟動(dòng) Kestrel 的項(xiàng)目)

使用 dotnet run 啟動(dòng)應(yīng)用時(shí):

  • 如果可用,讀取 launchSettings.json。 launchSettings.json 中的 environmentVariables 設(shè)置會(huì)替代環(huán)境變量。
  • 此時(shí)顯示承載環(huán)境。

以下輸出顯示了使用 dotnet run 啟動(dòng)的應(yīng)用:

bash

PS C:\Websites\EnvironmentsSample> dotnet run
Using launch settings from C:\Websites\EnvironmentsSample\Properties\launchSettings.json...
Hosting environment: Staging
Content root path: C:\Websites\EnvironmentsSample
Now listening on: http://localhost:54340
Application started. Press Ctrl+C to shut down.

Visual Studio 項(xiàng)目屬性“調(diào)試”選項(xiàng)卡提供 GUI 來(lái)編輯 launchSettings.json 文件:

項(xiàng)目屬性設(shè)置環(huán)境變量

在 Web 服務(wù)器重新啟動(dòng)之前,對(duì)項(xiàng)目配置文件所做的更改可能不會(huì)生效。 必須重新啟動(dòng) Kestrel 才能檢測(cè)到對(duì)其環(huán)境所做的更改。

 警告

launchSettings.json 不應(yīng)存儲(chǔ)機(jī)密。 機(jī)密管理器工具可用于存儲(chǔ)本地開(kāi)發(fā)的機(jī)密。

使用 Visual Studio Code 時(shí),可以在 .vscode/launch.json 文件中設(shè)置環(huán)境變量。 以下示例將環(huán)境設(shè)置為 Development:

JSON

{
   "version": "0.2.0",
   "configurations": [
        {
            "name": ".NET Core Launch (web)",

            ... additional VS Code configuration settings ...

            "env": {
                "ASPNETCORE_ENVIRONMENT": "Development"
            }
        }
    ]
}

使用與 Properties/launchSettings.json 相同的方法通過(guò) dotnet run 啟動(dòng)應(yīng)用時(shí),不讀取項(xiàng)目中的 .vscode/launch.json 文件。 在沒(méi)有 launchSettings.json 文件的 Development 環(huán)境中啟動(dòng)應(yīng)用時(shí),需要使用環(huán)境變量設(shè)置環(huán)境或者將命令行參數(shù)設(shè)為 dotnet run 命令。

生產(chǎn)

Production 環(huán)境應(yīng)配置為最大限度地提高安全性、性能和應(yīng)用可靠性。 不同于開(kāi)發(fā)的一些通用設(shè)置包括:

  • 緩存。
  • 客戶端資源被捆綁和縮小,并可能從 CDN 提供。
  • 已禁用診斷錯(cuò)誤頁(yè)。
  • 已啟用友好錯(cuò)誤頁(yè)。
  • 已啟用生產(chǎn)記錄和監(jiān)視。 例如,Application Insights

設(shè)置環(huán)境

為測(cè)試設(shè)置特定環(huán)境通常很有用。 如果未設(shè)置環(huán)境,默認(rèn)值為 Production,這會(huì)禁用大多數(shù)調(diào)試功能。 設(shè)置環(huán)境的方法取決于操作系統(tǒng)。

Azure 應(yīng)用服務(wù)

若要在 Azure 應(yīng)用服務(wù)中設(shè)置環(huán)境,請(qǐng)執(zhí)行以下步驟:

  1. 從“應(yīng)用服務(wù)”邊欄選項(xiàng)卡中選擇應(yīng)用。
  2. 在“設(shè)置”組中,選擇“應(yīng)用程序設(shè)置”邊欄選項(xiàng)卡。
  3. 在“應(yīng)用程序設(shè)置”區(qū)域中,選擇“添加新設(shè)置”。
  4. 在“輸入名稱”中提供 ASPNETCORE_ENVIRONMENT。 在“輸入值”中提供環(huán)境(例如 Staging)。
  5. 交換部署槽位時(shí),如果希望環(huán)境設(shè)置保持當(dāng)前槽位,請(qǐng)選中“槽位設(shè)置”復(fù)選框。 有關(guān)詳細(xì)信息,請(qǐng)參閱 Azure 文檔:交換哪些設(shè)置?。
  6. 選擇邊欄選項(xiàng)卡頂部的“保存”。

在 Azure 門戶中添加、更改或刪除應(yīng)用設(shè)置(環(huán)境變量)后,Azure 應(yīng)用服務(wù)自動(dòng)重啟應(yīng)用。

Windows

若要在使用 dotnet run 啟動(dòng)該應(yīng)用時(shí)為當(dāng)前會(huì)話設(shè)置 ASPNETCORE_ENVIRONMENT,則使用以下命令:

命令提示符

console

set ASPNETCORE_ENVIRONMENT=Development

PowerShell

PowerShell

$Env:ASPNETCORE_ENVIRONMENT = "Development"

這些命令僅對(duì)當(dāng)前窗口有效。 窗口關(guān)閉時(shí),ASPNETCORE_ENVIRONMENT 設(shè)置將恢復(fù)為默認(rèn)設(shè)置或計(jì)算機(jī)值。

若要在 Windows 中全局設(shè)置值,請(qǐng)采用下列兩種方法之一:

  • 依次打開(kāi)“控制面板” > “系統(tǒng)” > “高級(jí)系統(tǒng)設(shè)置”,再添加或編輯“ASPNETCORE_ENVIRONMENT”值:系統(tǒng)高級(jí)屬性ASPNET Core 環(huán)境變量
  • 打開(kāi)管理命令提示符并運(yùn)行 setx 命令,或打開(kāi)管理 PowerShell 命令提示符并運(yùn)行 [Environment]::SetEnvironmentVariable:命令提示符console復(fù)制setx ASPNETCORE_ENVIRONMENT Development /M /M 開(kāi)關(guān)指明,在系統(tǒng)一級(jí)設(shè)置環(huán)境變量。 如果未使用 /M 開(kāi)關(guān),就會(huì)為用戶帳戶設(shè)置環(huán)境變量。PowerShellPowerShell復(fù)制[Environment]::SetEnvironmentVariable("ASPNETCORE_ENVIRONMENT", "Development", "Machine") Machine 選項(xiàng)值指明,在系統(tǒng)一級(jí)設(shè)置環(huán)境變量。 如果將選項(xiàng)值更改為 User,就會(huì)為用戶帳戶設(shè)置環(huán)境變量。

如果全局設(shè)置 ASPNETCORE_ENVIRONMENT 環(huán)境變量,它就會(huì)對(duì)在值設(shè)置后打開(kāi)的任何命令窗口中對(duì) dotnet run 起作用。

web.config

若要使用 web.config 設(shè)置 ASPNETCORE_ENVIRONMENT 環(huán)境變量,請(qǐng)參閱 ASP.NET Core 模塊的“設(shè)置環(huán)境變量”部分。 使用 web.config 設(shè)置 ASPNETCORE_ENVIRONMENT 環(huán)境變量后,它的值會(huì)替代系統(tǒng)級(jí)設(shè)置。

項(xiàng)目文件或發(fā)布配置文件

對(duì)于 Windows IIS 部署: 將 <EnvironmentName> 屬性包含在發(fā)布配置文件(.pubxml)或項(xiàng)目文件中。 此方法在發(fā)布項(xiàng)目時(shí)設(shè)置 web.config 中的環(huán)境:

XML

<PropertyGroup>
  <EnvironmentName>Development</EnvironmentName>
</PropertyGroup>

每個(gè) IIS 應(yīng)用程序池

若要為在獨(dú)立應(yīng)用池中運(yùn)行的應(yīng)用設(shè)置 ASPNETCORE_ENVIRONMENT 環(huán)境變量(IIS 10.0 或更高版本支持此操作),請(qǐng)參閱環(huán)境變量 <environmentVariables> 主題中的“AppCmd.exe 命令”部分。 為應(yīng)用池設(shè)置 ASPNETCORE_ENVIRONMENT 環(huán)境變量后,它的值會(huì)替代系統(tǒng)級(jí)設(shè)置。

 重要

在 IIS 中托管應(yīng)用并添加或更改 ASPNETCORE_ENVIRONMENT 環(huán)境變量時(shí),請(qǐng)采用下列方法之一,讓新值可供應(yīng)用拾?。?/p>

  • 在命令提示符處依次執(zhí)行 net stop was /y 和 net start w3svc。
  • 重啟服務(wù)器。

macOS

設(shè)置 macOS 的當(dāng)前環(huán)境可在運(yùn)行應(yīng)用時(shí)完成:

bash

ASPNETCORE_ENVIRONMENT=Development dotnet run

或者,在運(yùn)行應(yīng)用前使用 export 設(shè)置環(huán)境:

bash

export ASPNETCORE_ENVIRONMENT=Development

在 .bashrc 或 .bash_profile 文件中設(shè)置計(jì)算機(jī)級(jí)環(huán)境變量。 使用任意文本編輯器編輯文件。 添加以下語(yǔ)句:

bash

export ASPNETCORE_ENVIRONMENT=Development

Linux

對(duì)于 Linux 發(fā)行版,請(qǐng)?jiān)诿钐崾痉惺褂?nbsp;export 命令進(jìn)行基于會(huì)話的變量設(shè)置,并使用 bash_profile 文件進(jìn)行計(jì)算機(jī)級(jí)環(huán)境設(shè)置。

按環(huán)境配置

若要按環(huán)境加載配置,我們建議:

基于環(huán)境的 Startup 類和方法

Startup 類約定

當(dāng) ASP.NET Core 應(yīng)用啟動(dòng)時(shí),Startup 類啟動(dòng)應(yīng)用。 應(yīng)用可以為不同的環(huán)境單獨(dú)定義 Startup 類(例如,StartupDevelopment),相應(yīng) Startup 類會(huì)在運(yùn)行時(shí)得到選擇。 優(yōu)先考慮名稱后綴與當(dāng)前環(huán)境相匹配的類。 如果找不到匹配的 Startup{EnvironmentName},就會(huì)使用 Startup 類。

若要實(shí)現(xiàn)基于環(huán)境的 Startup 類,請(qǐng)為使用中的每個(gè)環(huán)境創(chuàng)建 Startup{EnvironmentName} 類,并創(chuàng)建回退 Startup 類:

C#

// Startup class to use in the Development environment
public class StartupDevelopment
{
    public void ConfigureServices(IServiceCollection services)
    {
        ...
    }

    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        ...
    }
}

// Startup class to use in the Production environment
public class StartupProduction
{
    public void ConfigureServices(IServiceCollection services)
    {
        ...
    }

    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        ...
    }
}

// Fallback Startup class
// Selected if the environment doesn't match a Startup{EnvironmentName} class
public class Startup
{
    public void ConfigureServices(IServiceCollection services)
    {
        ...
    }

    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        ...
    }
}

使用接受程序集名稱的 UseStartup(IWebHostBuilder, String) 重載:

C#

public static void Main(string[] args)
{
    CreateWebHostBuilder(args).Build().Run();
}

public static IWebHostBuilder CreateWebHostBuilder(string[] args)
{
    var assemblyName = typeof(Startup).GetTypeInfo().Assembly.FullName;

    return WebHost.CreateDefaultBuilder(args)
        .UseStartup(assemblyName);
}

Startup 方法約定

Configure 和 ConfigureServices 支持窗體 Configure<EnvironmentName> 和 Configure<EnvironmentName>Services 的環(huán)境特定版本:

C#

public class Startup
{
    public Startup(IConfiguration configuration)
    {
        Configuration = configuration;
    }

    public IConfiguration Configuration { get; }

    public void ConfigureServices(IServiceCollection services)
    {
        StartupConfigureServices(services);
    }

    public void ConfigureStagingServices(IServiceCollection services)
    {
        StartupConfigureServices(services);
    }

    private void StartupConfigureServices(IServiceCollection services)
    {
        services.AddMvc()
            .SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
    }

    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }

        if (env.IsProduction() || env.IsStaging() || env.IsEnvironment("Staging_2"))
        {
            app.UseExceptionHandler("/Error");
        }

        app.UseStaticFiles();
        app.UseMvc();
    }

    public void ConfigureStaging(IApplicationBuilder app, IHostingEnvironment env)
    {
        if (!env.IsStaging())
        {
            throw new Exception("Not staging.");
        }

        app.UseExceptionHandler("/Error");
        app.UseStaticFiles();
        app.UseMvc();
    }
}


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)