Working with Multiple Environments(使用多个环境)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?Working with Multiple Environments
? ? ? ? ASP.NET 5提高了跨多環(huán)境控制應(yīng)用程序行為的支持。比如:開發(fā),過度,生產(chǎn)。環(huán)境變量用來表明應(yīng)用程序運(yùn)行的環(huán)境,允許適當(dāng)配置應(yīng)用程序。
?In ?this ? article(在這篇文章中主要介紹的章節(jié)如下):
? Development, Staging, Production
? Determining the environment at runtime
? Startup conventions Browse or download samples on GitHub.
Development, Staging, Production
? ? ? ? ASP.NET 5引用特定的環(huán)境變量。ASPNET_ENV(or Hosting:Environment)描述了當(dāng)前正在運(yùn)行的應(yīng)用程序的環(huán)境。這個(gè)變量可以設(shè)置任何值,但是按照慣例使用三個(gè)值,分別為:Development, Staging, and Production。您將發(fā)現(xiàn)這些值用于ASP.NET 5提高那個(gè)的樣品和模板中。
? ? ? ? 當(dāng)前環(huán)境設(shè)置能從ASP.NET 5檢測(cè)到所使用的編程方式,此外,ASP.NET MVC6介紹了Environment Tag Helper,Environment Tag Helper允許MVC視圖包括基于當(dāng)前應(yīng)用程序環(huán)境的某些部分。
Development
? ? ? ?下面是開發(fā)應(yīng)用程序時(shí)使用的環(huán)境。用Visual Studio 2015時(shí),在項(xiàng)目的調(diào)試配置文件中指定環(huán)境設(shè)置,比如IIS Express,如下圖所示:
? ? ? ? ? ?
? ? ? ? ? ?當(dāng)修改已創(chuàng)建項(xiàng)目的默認(rèn)設(shè)置,更改在Properties文件夾中的launchSettings.json中被持久化, ? 包括用到的任何環(huán)境變量。在Web配置文件改變?ASPNET_ENV (or Hosting:Environment) 變量為Staging之后,launchSettings.json文件如下所示:
? ? ? ? ?
{"iisSettings": { "windowsAuthentication": false,"anonymousAuthentication": true,"iisExpress": { "applicationUrl": "http://localhost:40088/", "sslPort": 0 } }, "profiles": {"IIS Express": { "commandName": "IISExpress","launchBrowser": true, "environmentVariables": {"ASPNET_ENV": "Development" } }, "web": { "commandName": "web","environmentVariables": {"Hosting:Environment": "Staging"} } } }? ?Staging環(huán)境是預(yù)生產(chǎn)環(huán)境,在生產(chǎn)環(huán)境之前用來最終測(cè)試,理想的情況是,它的物理特性能反應(yīng)項(xiàng)目產(chǎn)品 ,以至于任何問題在Staging環(huán)境中第一次出現(xiàn)時(shí)就能解決而不影響客戶的使用。
Production(產(chǎn)品)
? ? ? ? ? 應(yīng)用程序運(yùn)行并被用戶使用的環(huán)境是Procuction環(huán)境。這個(gè)環(huán)境應(yīng)該被配置最大的安全性,性能和應(yīng)用程序的健壯性,production環(huán)境中可能有的一些公共設(shè)置和開發(fā)時(shí)有所不同,包括以下。
? ? ? ? Turn on caching
? ? ? ??Ensure all client-side resources are bundled, mini?ed, and potentially served from a CDN?
? ? ? ??Turn off diagnostic ErrorPages
? ? ? ? Turn on friendly error pages
? ? ? ? Enable production logging and monitoring (for example, Application Insights)
?
? ? ? ? 這不是一個(gè)完整的列表,最好避免在應(yīng)用程序的很多部分進(jìn)行分散環(huán)境檢查。相反,推薦的方法是盡量在應(yīng)用程序的Startup類(cs)中執(zhí)行這種檢查。
Determining the environment at runtime(在運(yùn)行時(shí)決定使用環(huán)境)
? ? ? 為了正常工作,IHostingEnvironment服務(wù)提供了帶有環(huán)境的核心抽象概念,ASP.NET hosting層提供了該服務(wù)并且通過依賴注入將這個(gè)服務(wù)注入到啟動(dòng)邏輯中。Visual Studio中的ASP.NET 5 網(wǎng)站模板用這種方法加載特定環(huán)境的配置文件(if present),并自定義應(yīng)用程序的錯(cuò)誤處理設(shè)置。在這2種情況下,目前指定環(huán)境通過調(diào)用 EnvironmentName 或者IsEnvironment 將IHostingEnvironment 的實(shí)例傳遞給適當(dāng)?shù)姆椒▉韺?shí)現(xiàn)這種行為的。
? ? ? ? ?如果需要檢查在特定的環(huán)境中,應(yīng)用程序是否運(yùn)行,用env.IsEnvironment("environmentname") ,它能正確地忽略大小寫。
? ? ? ? ?例如,可以使用以下代碼在Con?gure方法中設(shè)置環(huán)境的具體錯(cuò)誤操作:
if (env.IsDevelopment()) { app.UseBrowserLink(); app.UseDeveloperExceptionPage(); app.UseDatabaseErrorPage(); } else { app.UseExceptionHandler("/Home/Error"); }如果應(yīng)用程序在開發(fā)環(huán)境中正常運(yùn)行,它可能BrowserLink ,開發(fā)特定的錯(cuò)誤頁,否則,配置一個(gè)標(biāo)準(zhǔn)的錯(cuò)誤頁作為對(duì)任何未處理異常的響應(yīng)顯示出來。
Startup conventions(啟動(dòng)約定)
????? ASP.NET 5支持基于協(xié)議的方法在當(dāng)前環(huán)境中配置應(yīng)用程序的啟動(dòng)。也可以根據(jù)環(huán)境通過編程的方式控制應(yīng)用程序的執(zhí)行,并允許創(chuàng)建和管理自己的協(xié)議。
???? 當(dāng)ASP.NET應(yīng)用程序啟動(dòng)時(shí),啟動(dòng)類啟動(dòng)應(yīng)用程序,加載配置設(shè)置等(到ASP.NET? startup了解更多)。然而,如果存在名為Startup{EnvironmentName}的類,(比如StartupDevelopment),ASPNET_ENV環(huán)境變量和這個(gè)名相匹配,使用啟動(dòng)類。開發(fā)時(shí)可以配置啟動(dòng)項(xiàng),當(dāng)應(yīng)用程序在Production的環(huán)境中運(yùn)行,將使用一個(gè)單獨(dú)的StartupProduction。反之亦然。
?? 當(dāng)應(yīng)用程序在Development環(huán)境中被設(shè)置成運(yùn)行,以下示例項(xiàng)目中的StartupDevelopment將運(yùn)行。
?? 在開發(fā)期間,運(yùn)行應(yīng)用程序,顯示歡迎屏幕,示例還包括一個(gè)StartupStaging類:
??? 當(dāng)ASPNET_ENV設(shè)置成Staging,并且應(yīng)用程序運(yùn)行,使用StartupStaging類,應(yīng)用程序?qū)@示字符串聲明,并運(yùn)行在staging?環(huán)境中。當(dāng)環(huán)境沒有設(shè)置成Development或者是Staging時(shí),會(huì)運(yùn)行應(yīng)用程序默認(rèn)的Startup類。(據(jù)推測(cè),設(shè)置為Production,而不是僅限于這三個(gè)選項(xiàng)。還要注意,如果沒有環(huán)境設(shè)置,運(yùn)行默認(rèn)啟動(dòng))。
???? 除了在當(dāng)前環(huán)境下使用完全獨(dú)立的Startup類,也可以重新在Startup類中配置應(yīng)用。Configure[Environment]()?和 Configure[Environment]Services()中的Configure()和ConfigureServices()方法支持特定環(huán)境的版本,和Startup類本身類似。如果定義了ConfigureDevelopment方法,當(dāng)環(huán)境設(shè)置為development時(shí),它將被調(diào)用,而不是調(diào)用Configure(),同樣,在同樣的環(huán)境中ConfigureDevelopmentServices()方法將被調(diào)用,而不是ConfigureServices()方法。
using Microsoft.AspNet.Builder;namespace Environments
{
public class StartupDevelopment
{
public void Configure(IApplicationBuilder app)
{
app.UseWelcomePage();
}
}
}
using Microsoft.AspNet.Builder;
using Microsoft.AspNet.Http;
namespace Environments
{
public class StartupStaging
{
public void Configure(IApplicationBuilder app)
{
app.Run(async context =>
{
context.Response.ContentType = "text/plain";
await context.Response.WriteAsync("Staging environment.");
});
}
}
}
總結(jié)
????? ASP.NET 5提供類很多特性和協(xié)議,允許開發(fā)人員在不同的環(huán)境中控制應(yīng)用程序如何執(zhí)行。當(dāng)發(fā)布應(yīng)用程序從development到staging到production。環(huán)境變量設(shè)置適當(dāng)?shù)沫h(huán)境,允許對(duì)應(yīng)用程序調(diào)試,測(cè)試或者使用進(jìn)行優(yōu)化。
???? 更多資源
??? Con?guration
?
轉(zhuǎn)載于:https://www.cnblogs.com/wmj01/p/5226977.html
總結(jié)
以上是生活随笔為你收集整理的Working with Multiple Environments(使用多个环境)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 类目,延展,协议的基本概念
- 下一篇: MinGW和MSYS的自动安装 【转】