.NET控制台应用程序无法读取config.json

时间:2016-04-27 10:18:11

标签: c# .net json configuration configurationmanager

在构建一个使用新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文件 ,为什么没有加载设置?

2 个答案:

答案 0 :(得分:5)

我的原始答案不合时宜。这是一个更新版本。这是基于最近发布的RC2。

如果找不到配置文件,则当前运行时将抛出FileNotFoundExceptionAddJsonFile()扩展方法采用名为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语法/格式后,一切正常。