asp.net core 环境(Development、Staging 、Production)
一.在asp.net core中使用多個環(huán)境
ASP.NET Core 配置是基于運行時環(huán)境, 使用環(huán)境變量。ASP.NET Core 在應(yīng)用啟動時讀取環(huán)境變量ASPNETCORE_ENVIRONMENT,并將該值存儲在 IHostingEnvironment.EnvironmentName 中。ASPNETCORE_ENVIRONMENT 可設(shè)置為任意值,但框架支持三個值:Development、Staging 和 Production。 如果發(fā)布項目未設(shè)置 ASPNETCORE_ENVIRONMENT,則默認為 Production (本機vs中項目Properties\launchSettings.json中environmentVariables默認設(shè)置的是Development,如果禁用environmentVariables,那默認則為Production)。
下面是Startup. Configure中的默認實現(xiàn),本機默認配置的是Development環(huán)境。
1.1 Development 模式
???????? 開發(fā)環(huán)境可以啟用不應(yīng)該在生產(chǎn)中公開的功能, 例如ASP.NET Core 模板在開發(fā)環(huán)境中啟用了開發(fā)人員異常頁(app.UseDeveloperExceptionPage())。當(dāng)出現(xiàn)異常時,顯示錯誤頁信息如下圖所示:
本地計算機開發(fā)環(huán)境可以在項目的 Properties\launchSettings.json 文件中設(shè)置。?在 launchSettings.json 中設(shè)置的環(huán)境值替代在系統(tǒng)環(huán)境中設(shè)置的值。新建的mvc項目默認配置如下:
launchSettings.json 中的?applicationUrl?屬性可指定服務(wù)器 URL 的列表。?在列表中的 URL 之間使用分號。注意:launchSettings.json只用于本機在vs 中開發(fā)使用,在開發(fā)中可以選擇三種之中任意一種的環(huán)境模式。當(dāng)項目發(fā)布后,發(fā)布后(iis做反向代理),發(fā)布的文件中并不會有l(wèi)aunchSettings.json文件。
如果不用vs來啟動應(yīng)用程序,使用 dotnet run 命令來 啟動應(yīng)用程序時,使用具有 "commandName": "Project" 的第一個配置文件。 commandName 的值指定要啟動的 Web 服務(wù)器。 commandName 可為以下任一項:IIS Express、IIS、Project(啟動 Kestrel 的項目)。
當(dāng)使用dotnet run 啟動應(yīng)用時:1會讀取?launchSettings.json中的environmentVariables;2是會顯示打印出host 環(huán)境。
?
1.2 ?Production? 模式
? ? ? ?Production 環(huán)境應(yīng)配置為最大限度地提高安全性、性能和應(yīng)用可靠性。?不同于開發(fā)環(huán)境的一些通用設(shè)置包括:
(1) 緩存
(2) 客戶端資源被捆綁和縮小,并可能從 CDN (網(wǎng)絡(luò)分發(fā))提供。
(3) 已禁用診斷錯誤頁。
(4) 已啟用友好錯誤頁。
(5) 已啟用生產(chǎn)記錄和監(jiān)視。
?
二. 環(huán)境設(shè)置
? 在項目中為測試設(shè)置特定環(huán)境通常很有用。?如果未設(shè)置環(huán)境,默認值為?Production,這會禁用大多數(shù)調(diào)試功能。設(shè)置環(huán)境的方法取決于操作系統(tǒng)。例如將asp.net core razor項目發(fā)布后,部署到IIS上,訪問OtherPages/page1時出現(xiàn)異常。此時默認是Production?環(huán)境變量,會顯示了error頁面信息, 表示已啟用友好錯誤頁。如下圖所示 :
2.1??修改環(huán)境變量
上面講到,設(shè)置環(huán)境的方法取決于操作系統(tǒng):有Azure 應(yīng)用服務(wù)、Windows、macOS、Linux等。每種操作系統(tǒng)上設(shè)置環(huán)境變量的方法不同,這里不在介紹,具體參考文檔。這里就先只介紹在Windows操作系統(tǒng)上以iis做反向代理的配置環(huán)境變量。
在Windows操作系統(tǒng)上配置環(huán)境變量方法有很多。當(dāng)發(fā)布后,文件中有一個web.config。這里就介紹下在web.config中設(shè)置?ASPNETCORE_ENVIRONMENT?環(huán)境變量。使用 web.config 設(shè)置?ASPNETCORE_ENVIRONMENT?環(huán)境變量后,它的值會替代系統(tǒng)級設(shè)置。
<aspNetCore processPath="dotnet" arguments=".\MyNetCoreStudy.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" hostingModel="InProcess"> ? ?<environmentVariables><environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Development" /></environmentVariables></aspNetCore>? ? ? ? ?此時iis上該項目就是Development開發(fā)環(huán)境了,再次訪問OtherPages/page1時出現(xiàn)異常,此時會捕獲同步和異步系統(tǒng)。管道中的異常實例,并生成HTML錯誤響應(yīng)。詳細異常信息如下圖所示:
三. 發(fā)布到IIS上步驟
下面簡單講下發(fā)布到IIS上的步驟實現(xiàn):
(1) 安裝好IIS,網(wǎng)上很多參考資料。
(2)下載dotnet-hosting-2.2.1-win.exe 用于在iis上處理對web服務(wù)器的請求。下載地址介紹:
https://docs.microsoft.com/zh-cn/aspnet/core/host-and-deploy/iis/index?view=aspnetcore-2.2#install-the-net-core-hosting-bundle
在里面找到“當(dāng)前 .NET Core 托管捆綁包安裝程序(直接下載)”這里進去可以下載到當(dāng)前版本(aspnetcore-2.2),安裝后,在iis模塊中能看到AspNetCoreModuleV2。對應(yīng)發(fā)布項目中web.config的<handlers>處理。
<handlers><add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" /></handlers>(3) 在vs中右擊項目發(fā)布,選擇"iis Ftp" 點擊發(fā)布。 選擇“文件系統(tǒng)”, 目標(biāo)位置可以選擇當(dāng)前電腦位置如: D:\DonetCoreStudy\IIS
?(4) 在iis這邊,添加網(wǎng)站
(5) 在應(yīng)用程序池中對項目(MyNetCoreStudy)? 選擇無托管代碼。
這樣發(fā)布到iis上就成功了。
?
四. 基于環(huán)境的 Startup 類
? 最后在講下Startup 類約定。當(dāng) ASP.NET Core 應(yīng)用啟動時,會啟動Startup類。 應(yīng)用程序可以為不同的環(huán)境,單獨定義 Startup 類。可以定義例如: StartupDevelopment類、StartupProduction類,Startup類。當(dāng)程序運行時會選擇相應(yīng)的 Startup 類。 程序會優(yōu)先考慮名稱后綴與當(dāng)前環(huán)境相匹配的類。如果是Developmen環(huán)境則程序進入StartupDevelopment類,如果是Production環(huán)境則程序進入StartupProduction類。如果找不到匹配的 Startup{EnvironmentName},就會使用 Startup 類。
基于環(huán)境的 Startup 類實現(xiàn)代碼如下:
原文地址:https://www.cnblogs.com/MrHSR/p/10276650.html
.NET社區(qū)新聞,深度好文,歡迎訪問公眾號文章匯總 http://www.csharpkit.com
總結(jié)
以上是生活随笔為你收集整理的asp.net core 环境(Development、Staging 、Production)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 使用Roslyn脚本化C#代码,C#动态
- 下一篇: ASP.NET Core 2.1 : 图