2016-04-27 8 views
0

新しいConfigurationBuilder実装を使用していた.netコンソールアプリケーションをappSettingsに作成しているうちに、問題が発生しました。.NETコンソールアプリが読み込まれないconfig.json

私は、次のコードを持っている:

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に渡されたファイルパスが見つからない場合は、FileNotFoundExceptionがスローされますが、例外はスローされません。

config.jsonファイルをとすると、と表示されますが、設定がロードされないのはなぜですか?

答えて

5

私の元の回答は印を付けていませんでした。ここに更新版があります。これは、最近リリースされたRC2に基づいています。

設定ファイルが見つからない場合、現在のランタイムはFileNotFoundExceptionをスローします。 AddJsonFile()拡張メソッドは、optionalというオプションのパラメータをとります。これがtrueの場合、メソッドはスローされません。

私はconfig.jsonを追加しましたが、それはbinディレクトリにコピーされないので、SetBasePath()拡張メソッドを使用して場所を指定しなければなりませんでした。これは、Webプロジェクトテンプレートが起動時に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" ], ...

+0

提案@Toddのおかげで、これは、私はそれを試してみました効果はなかったです。 – awj

関連する問題