public static IHostBuilder CreateHostBuilder(string[] args) { return(Host.CreateDefaultBuilder(args) .ConfigureWebHostDefaults(webBuilder => { // Custom Config var config = new ConfigurationBuilder() .AddJsonFile("LiveReloadServer.json", optional: true) .AddJsonFile("LiveReloadWebServer.json", optional: true) .AddEnvironmentVariables() .AddEnvironmentVariables("LIVERELOADSERVER_") .AddEnvironmentVariables("LIVERELOADWEBSERVER_") .AddCommandLine(args) .Build(); var serverConfig = new LiveReloadServerConfiguration(); serverConfig.LoadFromConfiguration(config); if (!serverConfig.ShowConsoleOutput) { Console.SetError(TextWriter.Null); Console.SetOut(TextWriter.Null); } var webRoot = serverConfig.WebRoot; if (!Directory.Exists(webRoot)) { throw new ApplicationException($"Launch Error: WebRoot '{webRoot}' is not a valid directory."); } // Custom Logging webBuilder .ConfigureLogging(logging => { logging.ClearProviders(); if (serverConfig.ShowConsoleOutput) { logging.AddConsole(); } logging.AddConfiguration(config); }) .UseConfiguration(config); if (!string.IsNullOrEmpty(webRoot)) { webBuilder.UseWebRoot(webRoot); } webBuilder.UseUrls($"http{(serverConfig.UseSsl ? "s" : "")}://{serverConfig.Host}:{serverConfig.Port}"); webBuilder .UseStartup <Startup>(); })); }
public static IHostBuilder CreateHostBuilder(string[] args) { return(Host.CreateDefaultBuilder(args) .ConfigureWebHostDefaults(webBuilder => { // Custom Config var config = new ConfigurationBuilder() .AddJsonFile("LiveReloadServer.json", optional: true) .AddJsonFile("LiveReloadWebServer.json", optional: true) .AddEnvironmentVariables() .AddEnvironmentVariables("LIVERELOADSERVER_") .AddEnvironmentVariables("LIVERELOADWEBSERVER_") .AddCommandLine(args) .Build(); var serverConfig = new LiveReloadServerConfiguration(); serverConfig.LoadFromConfiguration(config); // Custom Logging webBuilder .ConfigureLogging(logging => { logging.ClearProviders(); logging.AddConsole(); logging.AddConfiguration(config); }) .UseConfiguration(config); var webRoot = serverConfig.WebRoot; if (!string.IsNullOrEmpty(webRoot)) { webBuilder.UseWebRoot(webRoot); } webBuilder.UseUrls($"http{(serverConfig.UseSsl ? "s" : "")}://{serverConfig.Host}:{serverConfig.Port}"); webBuilder .UseStartup <Startup>(); })); }
// This method gets called by the runtime. Use this method to add services to the container. public void ConfigureServices(IServiceCollection services) { ServerConfig = new LiveReloadServerConfiguration(); ServerConfig.LoadFromConfiguration(Configuration); if (ServerConfig.UseLiveReload) { services.AddLiveReload(opt => { opt.FolderToMonitor = ServerConfig.WebRoot; opt.LiveReloadEnabled = ServerConfig.UseLiveReload; if (!string.IsNullOrEmpty(ServerConfig.Extensions)) { opt.ClientFileExtensions = ServerConfig.Extensions; } if (ServerConfig.UseMarkdown && !opt.ClientFileExtensions.Contains(".md", StringComparison.OrdinalIgnoreCase)) { opt.ClientFileExtensions += ",.md,.mkdown"; } }); } IMvcBuilder mvcBuilder = null; #if USE_RAZORPAGES if (ServerConfig.UseRazor) { mvcBuilder = services.AddRazorPages(opt => { opt.RootDirectory = "/"; }); } #endif if (ServerConfig.UseMarkdown) { services.AddMarkdown(config => { //var templatePath = Path.Combine(WebRoot, "markdown-themes/__MarkdownPageTemplate.cshtml"); //if (!File.Exists(templatePath)) // templatePath = Path.Combine(Environment.CurrentDirectory,"markdown-themes/__MarkdownPageTemplate.cshtml"); //else var templatePath = ServerConfig.MarkdownTemplate; templatePath = templatePath.Replace("\\", "/"); var folderConfig = config.AddMarkdownProcessingFolder("/", templatePath); // Optional configuration settings folderConfig.ProcessExtensionlessUrls = true; // default folderConfig.ProcessMdFiles = true; // default folderConfig.RenderTheme = ServerConfig.MarkdownTheme; folderConfig.SyntaxTheme = ServerConfig.MarkdownSyntaxTheme; }); // we have to force MVC in order for the controller routing to work mvcBuilder = services .AddMvc(); // copy Markdown Template and resources if it doesn't exist if (ServerConfig.CopyMarkdownResources) { CopyMarkdownTemplateResources(); } } // If Razor or Markdown are enabled we need custom folders if (mvcBuilder != null) { mvcBuilder.AddRazorRuntimeCompilation( opt => { opt.FileProviders.Clear(); opt.FileProviders.Add(new PhysicalFileProvider(ServerConfig.WebRoot)); opt.FileProviders.Add(new PhysicalFileProvider(Path.Combine(Startup.StartupPath, "templates"))); }); LoadPrivateBinAssemblies(mvcBuilder); } }