在运行时在ASP.NET Core中设置ContentRoot和WebRoot(例如,使用配置文件)

时间:2016-11-02 15:59:18

标签: c# asp.net json asp.net-core .net-core

我在一个Windows服务中托管了一个ASP.NET核心网站,该网站安装在多台计算机上。我不想对WebRoot目录进行硬编码,也不想依赖ContentRoot Directory.GetCurrentDirectory()内的相对路径。我希望它可以使用json配置文件进行配置,例如,我尝试了以下内容:

在Program.cs中:

var host = new WebHostBuilder()
            .UseKestrel()
            .UseIISIntegration()
            .UseStartup<Startup>()
            .Build();
host.RunAsService();

在Startup.cs中:

public Startup(IHostingEnvironment env)
    {
        var builder = new ConfigurationBuilder()
            .SetBasePath(env.ContentRootPath)
            .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)

        builder.AddEnvironmentVariables();
        Configuration = builder.Build();
        env.WebRootPath = Configuration["webroot"];
    }

我的appsettings.json看起来像这样:

{
  "webroot": "C:\\path\\to\\my\\custom\\webroot",
  "Logging": {
     "IncludeScopes": false,
     "LogLevel": {
        "Default": "Debug",
        "System": "Information",
        "Microsoft": "Information"
     }
  }
}

然而,这不起作用。我想知道正确的方法是什么。

修改

以下是project.json

的内容
{
  "dependencies": {
    "Microsoft.ApplicationInsights.AspNetCore": "1.0.2",
    "Microsoft.AspNetCore.Mvc": "1.0.1",
    "Microsoft.AspNetCore.Routing": "1.0.1",
    "Microsoft.AspNetCore.Server.IISIntegration": "1.0.0",
    "Microsoft.AspNetCore.Server.Kestrel": "1.0.1",
    "Microsoft.Extensions.Configuration.EnvironmentVariables": "1.0.0",
    "Microsoft.Extensions.Configuration.FileExtensions": "1.0.0",
    "Microsoft.Extensions.Configuration.Json": "1.0.0",
    "Microsoft.Extensions.Logging": "1.0.0",
    "Microsoft.Extensions.Logging.Console": "1.0.0",
    "Microsoft.Extensions.Logging.Debug": "1.0.0",
    "Microsoft.Extensions.Options.ConfigurationExtensions": "1.0.0",
    "Microsoft.AspNetCore.StaticFiles": "1.0.0",
    "Microsoft.AspNetCore.Hosting.WindowsServices": "1.0.0"
  },

  "tools": {
    "Microsoft.AspNetCore.Server.IISIntegration.Tools": "1.0.0-preview2-final"
  },

  "frameworks": {
    "net452": {}
  },

  "buildOptions": {
    "emitEntryPoint": true,
    "preserveCompilationContext": true
  },

  "publishOptions": {
    "include": [
      "wwwroot",
      "**/*.cshtml",
      "appsettings.json",
      "web.config"
    ]
  },

  "scripts": {
    "prepublish": [ "npm install" ],
    "prepare": ["webpack -p"],
    "postpublish": [ "dotnet publish-iis --publish-folder %publish:OutputPath% --framework %publish:FullTargetFramework%" ]
  }
}

0 个答案:

没有答案