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的配置项
重新加载即可