web-dev-qa-db-ja.com

完全な.NET FrameworkコンソールアプリでのJSON構成

.NET 4.7.1を対象とするコンソールアプリがあります。 .Net Frameworkアプリで.netコアを構成のように使用しようとしています。私の `App.configは:

<configuration>
  <configSections>
    <section name="configBuilders" type="System.Configuration.ConfigurationBuildersSection, System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" restartOnExternalChanges="false" requirePermission="false" />
  </configSections>
  <configBuilders>
    <builders>
    <add name="SimpleJson"
         jsonFile="config.json"
         optional="false"
         jsonMode="Sectional"
         type="Microsoft.Configuration.ConfigurationBuilders.SimpleJsonConfigBuilder, Microsoft.Configuration.ConfigurationBuilders.Json, Version=1.0.0.0, Culture=neutral" /></builders>
  </configBuilders>

そして、「常にコピー」プロパティがTrueに設定されたファイルconfig.jsonがあります。 config.jsonは次のようになります:

  {
  "appSettings": {
    "setting1": "value1",
    "setting2": "value2",
    "complex": {
      "setting1": "complex:value1",
      "setting2": "complex:value2"
    }
  },

  "connectionStrings": {
    "mySpecialConnectionString": "Dont_check_connection_information_into_source_control"
  }
}

次に、mainメソッドで、次のような構成値を読み取ろうとします。

var config = ConfigurationManager.AppSettings

ただし、configの値は常にnullです。私は以下を試しました:

  1. jsonFile~/config.jsonに変更してみました。
  2. jsonModeをフラットのデフォルト値に設定するときに、非常に基本的なKey-Value(フラット)json設定を指定しようとしました。

しかし、設定を機能させることができません。この問題を解決するにはどうすればよいですか?

5
kovac

私もこれを少し前に行いましたが、それは単なるワンライナーではありませんでした。 Microsoft Nugetパッケージを使用できますMicrosoft.Extensions.ConfigurationMicrosoft.Extensions.Configuration.Jsonと独自のConfigurationBuilderをセットアップします。

この記事 を見てください、あなたはそれを乗り越えるべきだと思います。

1
Waescher
  • あなたの質問から省略されていると思う主なことは、web.configファイルの「appSettings」要素で「configBuilders」属性を指定することです:<appSettings configBuilders="SimpleJson">
  • JsonMode = "Sectional"属性を削除する必要はないと思います。
  • Config.jsonの「常にコピー」をTrueに設定する必要はないと思います。

これは私のために働くコードです:

<configBuilders>
    <builders>
    <add name="SimpleJson" jsonFile="~\developer_config.json" optional="false" jsonMode="Sectional" type="Microsoft.Configuration.ConfigurationBuilders.SimpleJsonConfigBuilder, Microsoft.Configuration.ConfigurationBuilders.Json, Version=1.0.0.0, Culture=neutral" />
    </builders>
</configBuilders>
<appSettings configBuilders="SimpleJson">
...
</appSettings>
0
Paul Schroeder

ソースコード の例を見てください

あなたはあなたの設定ファイルセクションに追加する必要があります

<appSettings configBuilders="SimpleJson">
<add key="AppConfiguration:Key1" value="will be replaced by value in json file" />
</appSettings>

そして、jsonMode = "Sectional"属性を削除します。

あなたはあなたの価値にアクセスすることができます

var key1 = ConfigurationManager.AppSettings["AppConfiguration:Key1"];
0
user2686610