Asp.net的熱更新方案Appdomain在aspnetcore中不被支持了
新的方案如下:
配置文件更新選項
reloadOnChange = true
var configurationBuilder = new ConfigurationBuilder() .SetBasePath(Directory.GetCurrentDirectory()) .AddJsonFile("config.json", optional: false, reloadOnChange: true) .AddEnvironmentVariables(); IConfigurationRoot configuration = configurationBuilder.Build(); config = configuration.GetSection("Name");
把需要熱更新的組件dll名稱和路徑寫入配置文件
使用二進制流的方式加載dll組件
var name = $"{Directory.GetCurrentDirectory()}/{config.Value}"; using (FileStream fs = new FileStream(name, FileMode.Open, FileAccess.Read)) { var alc = AssemblyLoadContext.Default; var asm = alc.LoadFromStream(fs); var types = asm.GetTypes(); var obj = Activator.CreateInstance(types[0]) as ITest; obj.Test(); }
每次更新時,需要變更dll名稱
同時更改config.json的配置項
重新加載即可
