Aspnetcore下面服务器热更新与配置热加载

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的配置项

重新加载即可

猜你喜欢

转载自www.cnblogs.com/Czbb/p/9842137.html