<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
上一節我們介紹了中介軟體的基本使用, 這一節我們講一講.Net Core的環境設定, 以及根據不同的環境載入不同的設定資訊
PS: 由於最近一直比較忙, 一直沒抽時間更新這個系列, 最近居多的博友催我, 所以繼續擠擠時間更新這個系列, 感謝大家的對本系列教學的喜歡和支援.
在實際開發中, 我們的系統往往會是至少兩個以上的執行環境, 最基本的就是, 開發環境和運營環境, 體系完整的公司, 還會有測試環境, 預釋出環境, 和一些自定義環境等等, 這些環境使用的設定或是一些引數肯定是不一樣的, 我們不可能為一個環境準備一份程式碼, 我們可以通過環境設定, 和 一些 if 判斷, 就可以做到環境的自動切換, 下面就仔細說說.
我們先通過預設的.Net Core MVC設定, 感受一下. 以前的程式碼找不到了, 新建一個空的.Net Core MVC專案吧, 程式碼後面會提供下載.
PS: IDE我已經使用VS2019
建好之後, 我們開啟Startup.cs程式碼檔案, 看Configure方法, 我相信, 有的博友已經發現了, 裡面的第一行程式碼是個if, 意思就是判斷當前環境是不是開發環境, 看單詞的字面意思也是這個意思, 所以學好英文對開發程式有很大的buff加成啊~~~
對於if裡的是什麼, 上一節已經講過, 不再稱述.
由此我們得出, 控制環境和判斷環境, 都是在Configure方法中, 注入的IHostingEnvironment介面物件進行的. 這裡我說一下, 系統預設提供的幾個判斷環境的方法. 我們使用env.Is, VS的智慧提示, 可以得到下面四個方法, 如圖:
我們修改一下Configure方法的程式碼, 修改後為:
public void Configure(IApplicationBuilder app, IHostingEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } app.Run(async (context) => { context.Response.ContentType = "text/plain;charset=utf-8"; //防止WriteAsync方法輸出中文亂碼 if (env.IsDevelopment()) { await context.Response.WriteAsync("開發環境", Encoding.UTF8); } else if (env.IsProduction()) { await context.Response.WriteAsync("運營環境", Encoding.UTF8); } else if (env.IsStaging()) { await context.Response.WriteAsync("預釋出環境", Encoding.UTF8); } else { await context.Response.WriteAsync("自定義環境", Encoding.UTF8); } }); }
然後F5執行, 瀏覽器會不出意外的輸出: "開發環境"
沒毛病, 我們修改一下編譯環境, 把Debug修改為Release, 然後生成, 如圖:
然後生成專案, 生成成功之後, 到專案的bin/Release/netcoreapp2.2目錄下, 開啟CMD, 執行dotnetUnit1.dll命令, 就會是這樣的, 如圖:
我們在瀏覽器輸入http://localhost:5000/回車, 不出意外, 會輸出: 運營環境 四個大字.
以上的流程, 就演示了最基本的開發環境和運營環境的設定和判斷. 下面我們演示自定義環境. 我們接著修改程式碼, 為當前環境設定個名字, 程式碼如下
public void Configure(IApplicationBuilder app, IHostingEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } env.EnvironmentName = "Cus"; //設定自定義環境名稱 app.Run(async (context) => { context.Response.ContentType = "text/plain;charset=utf-8"; //防止WriteAsync方法輸出中文亂碼 if (env.IsDevelopment()) { await context.Response.WriteAsync("開發環境", Encoding.UTF8); } else if (env.IsProduction()) { await context.Response.WriteAsync("運營環境", Encoding.UTF8); } else if (env.IsStaging()) { await context.Response.WriteAsync("預釋出環境", Encoding.UTF8); } else { await context.Response.WriteAsync("自定義環境", Encoding.UTF8); } }); }
F5執行專案, 瀏覽器毫不意外的輸出了: 自定義環境
如果我們要輸出預釋出環境的話, 只需要把EnvironmentName 屬性的值改成 "Staging
" 即可, 這裡不做演示, 自行嘗試, 設定程式碼如下:
env.EnvironmentName = "Staging"; //設定為預釋出環境
發設定為Staging
和其它值的區別就是系統系統了一個IsStaging方法
為了更加直觀的演示自定義環境, 我們把else改一下, 改完之後的程式碼如下:
public void Configure(IApplicationBuilder app, IHostingEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } env.EnvironmentName = "Cus"; //設定自定義環境名稱 app.Run(async (context) => { context.Response.ContentType = "text/plain;charset=utf-8"; //防止WriteAsync方法輸出中文亂碼 if (env.IsDevelopment()) { await context.Response.WriteAsync("開發環境", Encoding.UTF8); } else if (env.IsProduction()) { await context.Response.WriteAsync("運營環境", Encoding.UTF8); } else if (env.IsStaging()) { await context.Response.WriteAsync("預釋出環境", Encoding.UTF8); } else { if (env.IsEnvironment("Cus")) { await context.Response.WriteAsync("自定義環境: Cus", Encoding.UTF8); } else if (env.IsEnvironment("Cus1")) { await context.Response.WriteAsync("自定義環境: Cus1", Encoding.UTF8); } else { await context.Response.WriteAsync($"自定義環境: {env.EnvironmentName}", Encoding.UTF8); } } }); }
具體執行效果和預計的一樣, 會輸出對應的自定義環境
但是實際開發過程中, 我不推薦在程式碼裡面修改當前環境, 而且通過專案的環境變數設定對應的環境, 具體修改方法如下
1: 點開Properties
2: 開啟launchSettings.json
3: 修改ASPNETCORE_ENVIRONMENT的值.
我們修改EnvironmentName屬性的程式碼刪掉, 修改launchSettings.json的設定為Cus, 執行是什麼效果, 修改後的效果如圖
沒出任何以外, 瀏覽器輸出的是自定義環境: Cus, 改成其它的值, 就輸入對應的自定義環境, 修改為Development就是開發環境,Staging就是預運營環境,Production就是運營環境
可能有人就要問了, 你只修改了上面的ASPNETCORE_ENVIRONMENT, 下面還有一個ASPNETCORE_ENVIRONMENT設定, 沒修改, 怎麼也可以. 別急, 馬上就說明
.Net Core MVC程式, 提供了兩種託管方式, 一種是通過IIS託管, 一種是自託管, 我們剛剛修改的環境, 只修改了IIS託管模式, VS預設又是IIS偵錯, 所以, 會有效果
如果使用自託管模式偵錯或釋出執行程式, 則修改下面的Unit1節點的設定即可. 當然, VS也提供了偵錯方式, 切換方法, 點選執行模式即可, 如圖:
選擇Unit1, 就是自託管模式啦~ , 然後F5執行, 瀏覽器輸出的依然是開發環境, 雖然IIS設定的是Cus環境, 但是Unit1自託管沒有修改, 我們修改一下Unit1的環境試試, 這裡我修改為Cus100, 然後選擇Unit1偵錯, F5執行, 瀏覽器輸出的就是
沒有任何問題
如果你覺得這種修改方式麻煩, 還有一種介面修改方法
我們在專案上右鍵 --> 屬性 --> 偵錯, 就能看到對應的設定了, 如圖:
當前是自託管模式, 我修改為Cus100, 這裡顯示的就是Cus100, 點選上面的組態檔, 還可以修改不同的託管模式的設定:
這裡就不做演示了, 修改效果和直接修改launchSettings.json檔案是一樣的
PS: 我們已經把兩種託管模式的環境都設定為了預設的Development, 開發環境.
上面已經講完了環境的設定和切換, 下面講講根據不同的環境, 自動讀取不同的組態檔, 我們先修改一下程式碼, 讓輸入的檔案是從appsettings.json設定裡面讀取的, 修改後的Startup類程式碼如下:
using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Http; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using System.Text; namespace Unit1 { public class Startup { private readonly IConfiguration _Configuration; /// <summary> /// /// </summary> /// <param name="configuration">注入或者組態檔的介面物件</param> public Startup(IConfiguration configuration) { this._Configuration = configuration; } // This method gets called by the runtime. Use this method to add services to the container. // For more information on how to configure your application, visit https://go.microsoft.com/fwlink/?LinkID=398940 public void ConfigureServices(IServiceCollection services) { } // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. public void Configure(IApplicationBuilder app, IHostingEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } //env.EnvironmentName = "Cus1"; //設定自定義環境名稱 app.Run(async (context) => { context.Response.ContentType = "text/plain;charset=utf-8"; //防止WriteAsync方法輸出中文亂碼 var msg = this._Configuration.GetValue<string>("hello"); await context.Response.WriteAsync(msg, Encoding.UTF8); /*if (env.IsDevelopment()) { await context.Response.WriteAsync("開發環境", Encoding.UTF8); } else if (env.IsProduction()) { await context.Response.WriteAsync("運營環境", Encoding.UTF8); } else if (env.IsStaging()) { await context.Response.WriteAsync("預釋出環境", Encoding.UTF8); } else { if (env.IsEnvironment("Cus")) { await context.Response.WriteAsync("自定義環境: Cus", Encoding.UTF8); } else if (env.IsEnvironment("Cus1")) { await context.Response.WriteAsync("自定義環境: Cus1", Encoding.UTF8); } else { await context.Response.WriteAsync($"自定義環境: {env.EnvironmentName}", Encoding.UTF8); } }*/ }); } } }
然後我們在appsettings.json設定中, 新增一行:"hello": "appsettings.json", 如圖:
F5執行, 瀏覽器輸出了appsettings.json, 沒問題
然後我們點一下appsettings.json檔案前面的箭頭, 會發現裡面還有個appsettings.Development.json檔案, 如圖:
開啟appsettings.Development.json檔案, 在裡面和設定appsettings.json一樣, 新增個hello設定, 把值設定為appsettings.Development.json, 如圖:
然後再F5執行, 瀏覽器輸出的就是appsettings.Development.json啦~, 這裡的原因, 前面章節已經講過, 這裡不再稱述.
我們新建個appsettings.Cus.json檔案, 然後在裡面加個hello設定, 值為appsettings.Cus.json, 如圖:
然後再修改執行環境為Cus, 修改方法參考上面, 然後F5執行, 瀏覽器就輸出appsettings.Cus.json啦~
到這裡, 這一節就結束了, 到目前為止, 我們對.Net Core MVC的環境和組態檔切換, 有了一個比較熟悉的瞭解了, 可以實際運用一下了, 再也不用擔心不同環境不同的設定搞混了
本節程式碼:下載
到此這篇關於ASP.Net Core MVC基礎系列之環境設定的文章就介紹到這了。希望對大家的學習有所幫助,也希望大家多多支援it145.com。
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45