我正在将我的ASP.Net Core项目从RC1更新到最近发布的RC2。我面临的一个问题是将config.json
文件加载到Startup.cs
中的配置对象中。
我的项目无法启动,并在找不到System.IO.FileNotFound
时抛出config.json
例外。
这是RC1的工作代码
public Startup(IHostingEnvironment env, IApplicationEnvironment appEnv)
{
Configuration = new ConfigurationBuilder()
.AddJsonFile("Settings/config.json")
.AddEnvironmentVariables()
.Build();
}
这是RC2中几乎相同的代码,但不起作用。请注意,我已将config.json
文件提升了一个级别,以防万一导致失败的文件夹层次结构。
public Startup(IHostingEnvironment env)
{
Configuration = new ConfigurationBuilder()
.SetBasePath(env.ContentRootPath)
.AddJsonFile("config.json")
.AddEnvironmentVariables()
.Build();
}
(N.B。我曾尝试使用和不使用SetBasePath
电话。)
一种选择是用这两行代替.AddJsonFile("config.json")
.AddJsonFile("config.json", optional: true, reloadOnChange: true)
.AddJsonFile($"config.{env.EnvironmentName}.json", optional: true)
这确实阻止了System.IO.FileNotFound
异常,但只是通过使文件加载可选,它似乎仍然无法加载。
要调试正在发生的事情,我添加了FileInfo("config.json")
并且该文件存在。我尝试使用该FileInfo
对象的全名,但我仍然得到例外。
如何在RC2中加载config.json
,或者如何诊断其加载失败?
答案 0 :(得分:3)
在构建WebHostBuilderExtensions.UseContentRoot
实例之前,您应该添加IWebHost
方法调用。
示例:
public static void Main(string[] args)
{
var host = new WebHostBuilder()
.UseKestrel()
.UseContentRoot(Directory.GetCurrentDirectory())
.UseIISIntegration()
.UseStartup<Startup>()
.Build();
host.Run();
}