熱更新,默認是不支持的。git
網站正在運行,在不關掉網站的狀況,修改了配置文件appsettings.json文件。當用戶下一次請求的時候,直接拿到咱們的配置信息github
這個跟咱們在asp.net裏面的config不同,咱們在更改web.config的內容後,站點會自動重啓,從新加載。web
這個熱更新就是之後咱們在修改了配置文件後,不會影響用戶的訪問。這是Configuration改進的比較有用的一個地方json
咱們只須要更改這一個地方IOptions修改成IOptionsSnapshotmvc
當你用到這種及時更新的配置信息就用IOptionsSnapshotapp
修改了配置信息後,咱們只須要刷新頁面就能夠了asp.net
實現的原理ide
在咱們以前的項目裏 ,這裏的AddJsonFile方法有另外兩個參數函數
參數2:是否可選,當這個存文件不存在的時候,是否會拋出異常。這裏咱們設置爲fasle網站
參數3:reloadOnChange設置爲true的話,當這個文件發生改變。就會從新加載這個文件。
using System; using Microsoft.Extensions.Configuration; namespace JsonConfig { class Program { static void Main(string[] args) { var builder = new ConfigurationBuilder() .AddJsonFile("class.json",false,true); var configuration = builder.Build(); Console.WriteLine($"ClassNo:{configuration["ClassNo"]}"); Console.WriteLine($"ClassDesc:{configuration["ClassDesc"]}"); Console.WriteLine("Students"); Console.Write(configuration["Students:0:name"]); Console.WriteLine(configuration["Students:0:age"]); Console.Write(configuration["Students:1:name"]); Console.WriteLine(configuration["Students:1:age"]); Console.Write(configuration["Students:2:name"]); Console.WriteLine(configuration["Students:2:age"]); Console.ReadLine(); } } }
{ "ClassNo": "1", "ClassDesc": "ASP.NET Core 101", "Students": [ { "name": "jesse", "age": "13" }, { "name": "jim", "age": "18" }, { "name": "lisa", "age": "22" } ] }
可是在咱們的asp.net core mvc中並無看到咱們去加reloadOnChange這個動做。
core mvc中是經過這裏的 CreateDefaultBuilder 來幫咱們完成的這一系列的操做。
分析githb上的WebHost的源代碼
https://github.com/aspnet/MetaPackages/blob/master/src/Microsoft.AspNetCore/WebHost.cs
在CreateDefaultBuilder方法裏面默認reloadOnChage設置爲了true。這就是爲何咱們core mvc項目裏面沒有作任何操做,這裏就已經能夠熱更新。
ConfigureAppConfiguration是上面的 WebHostBuilder 的一個擴展函數
咱們能夠在這裏調用ConfigureAppConfiguration方法,把默認的覆蓋掉。取消掉了熱更新。這樣咱們的熱更新就取消掉了。