using System; using System.Collections.Generic; using System.IO; using Infrastructure.Configuration; using Infrastructure.Extensions; using Microsoft.AspNetCore.Hosting; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Logging; using Serilog; namespace Infrastructure.Web.Hosting { public static class IWebHostBuilderExtensions { [System.Diagnostics.CodeAnalysis.SuppressMessage("Design", "CA1031:不捕获常规异常类型", Justification = "<挂起>")] public static void Run(this IWebHostBuilder hostBuilder, List configValues = null, int? fileSize = null) where TStartup : class { try { hostBuilder .Configuration(configValues, fileSize) .Build() .Run(); } catch (Exception ex) { ex.PrintStack(); Log.Fatal(ex.Message); } finally { Log.CloseAndFlush(); } } public static IConfigurationBuilder Build(this IConfigurationBuilder builder, List configValues) { return builder.SetBasePath(Directory.GetCurrentDirectory()) .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true) .AddEFConfiguration(options => options.UseSqlite("Data Source=configuration.db"), configValues ?? new List()) .AddEnvironmentVariables(); } public static IWebHostBuilder Configuration(this IWebHostBuilder hostBuilder, List configValues = null, int? fileSize = null) where TStartup : class { var configuration = new ConfigurationBuilder().Build(configValues).Build(); Log.Logger = new LoggerConfiguration() .ReadFrom.Configuration(configuration) .WriteTo.Console() #if DEBUG .WriteTo.File("logs/log.txt", rollOnFileSizeLimit: true, fileSizeLimitBytes: fileSize ?? 100 * 1024 * 1024, rollingInterval: RollingInterval.Infinite) #else .WriteTo.File("logs/log.txt", fileSizeLimitBytes: fileSize ?? 100 * 1024 * 1024) #endif .CreateLogger(); hostBuilder .UseConfiguration(configuration) .UseIISIntegration() //.UseKestrel() .UseSerilog() .ConfigureAppConfiguration((hostingContext, config) => { config.Build(configValues); }) .UseStartup(); return hostBuilder; } } }