在构建一个使用新ConfigurationBuilder
实现的.net控制台应用程序时,我遇到了问题。
我有以下代码:
appSettings
public static void Main(string[] args)
{
try
{
var builder = new ConfigurationBuilder().AddJsonFile("config.json");
var config = builder.Build();
if (config["Azure"] != null)
{
;
}
}
catch (System.IO.FileNotFoundException exception)
{
...
}
}
文件位于同一目录中,如下所示:
config.json
但是{
"Azure": {
"Storage": {
"ConnectionString": "...",
"ContainerName": "..."
}
},
"Data": {
"DefaultConnection": {
"ConnectionString": "..."
}
},
"Logging": {
"RecordProgress": "..."
}
}
对象不包含任何键。
我在某处读到如果找不到传递给config
的文件路径,那么它会抛出AddJsonFile
,但在我的代码中,永远不会抛出异常。
假设可以找到config.json文件 ,为什么没有加载设置?
答案 0 :(得分:5)
我的原始答案不合时宜。这是一个更新版本。这是基于最近发布的RC2。
如果找不到配置文件,则当前运行时将抛出FileNotFoundException
。 AddJsonFile()
扩展方法采用名为optional
的可选参数,如果为true,则会导致方法不抛出。
我添加了config.json
并且它没有被复制到bin目录,因此我必须使用SetBasePath()
扩展方法指定位置。这是Web项目模板在Startup中使用IHostingEnvironment.ContentRootPath
执行的操作。在控制台应用中,您可以使用Directory.GetCurrentDirectory()
。
var builder = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("config.json");
var config = builder.Build();
最后,config["Key"]
索引器并不适用于我。相反,我必须使用GetSection()
扩展方法。因此,上面的示例配置文件可以通过以下方式访问:
// var result = config["Logging"];
var section = config.GetSection("Logging");
var result = section["RecordProgress"];
我暂时离开了旧答案。
旧答案: 我在这里找到了一个可能的解决方案:https://github.com/aspnet/Mvc/issues/4481。
引用该问题。
感谢repro项目。看起来你需要更新 project.json文件有"内容"节点并有Config.json 这里指定。
实施例: https://github.com/aspnet/MusicStore/blob/dev/src/MusicStore/project.json#L22
您的project.json
可能需要新的内容元素。
...
"content": [
"Areas",
"Views",
"wwwroot",
"config.json",
"web.config"
],
...
答案 1 :(得分:0)
我遇到了同样的问题。
config.json位于正确的目录中,但仍未找到。
解决方案: config.json包含一个拼写错误,破坏了json语法。在config.json中修复json语法/格式后,一切正常。