2017-07-11 27 views
7

私は問題があります。希望私は思っ.Net Coreでapp.configを使用する

string connectionString = ConfigurationManager.ConnectionStrings["sampleDatabase"].ConnectionString; 
Console.WriteLine(connectionString); 

// read appSettings configuration 
string appSettingValue = ConfigurationManager.AppSettings["sampleApplication"]; 
Console.WriteLine(appSettingValue); 

、それは、インターネットからの例です:私はこのようなapp.configを使用してネットコア(C#の)でプログラムを記述する必要があります。

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <configSections> 
    <section name="custom" type="ConfigurationSample.CustomConfigurationSection, ConfigurationSample"/> 
    </configSections> 
    <connectionStrings> 
    <add name="sampleDatabase" connectionString="Data Source=localhost\SQLExpress;Initial Catalog=SampleDatabase;Integrated Security=True"/> 
    </connectionStrings> 
    <appSettings> 
    <add key="sampleApplication" value="Configuration Sample"/> 
    </appSettings> 
    <custom> 
    <customConfigurations> 
     <add key="customSample" name="Mickey Mouse" age="83"/> 
    </customConfigurations> 
    </custom> 
</configuration> 

と私は書きます仕事が、私は例外を取得しています:

System.Configuration.ConfigurationErrorsException: 'Error Initializing the configuration system.' 
Inner Exception 
TypeLoadException: Could not load type 'System.Configuration.InternalConfigurationHost' from assembly 'CoreCompat.System.Configuration, Version=4.2.3.0, Culture=neutral, PublicKeyToken=null' because the method 'get_bundled_machine_config' has no implementation (no RVA). 

私はNuGet経由でダウンロード - CoreCompat.System.Configuration -Version 4.2.3-R4 -pre・パッケージをインストールし、まだ動作しません。多分誰かが私を助けることができますか?

+1

私は、.netコアでは設定のためにjsonファイルを使用すると思います。それを見てください。 – Phiter

+0

.NETコアでは、app.configファイルではなくappsettings.jsonを使用します。 –

+0

しかし、私は.NetコアでASP.Netコアではないと言っています – Nju

答えて

3
  1. あなたは、ASP.NETのコアアプリだけではなく、で任意の .NETのコアアプリをConfiguration APIを使用することができます。 リンクに提供されているサンプルを見ると、コンソールアプリケーションでconfigsを読み込む方法が示されています。

  2. ほとんどの場合、JSONソース(.jsonというファイル)が最適な設定ソースです。

    注:設定ファイルがappsettings.jsonであると誰かが言うときは、混乱しないでください。任意のファイル名を使用することができます。これはあなたに適しており、ファイルの場所は異なる場合があります。具体的な規則はありません。

    しかし、現実の世界は複雑であるとして、異なるコンフィギュレーションプロバイダーの多くがあります。

    • ファイル形式(INI、JSON、およびXML)
    • コマンドライン引数
    • は、環境変数

    などです。あなたは、カスタムプロバイダを使用/書くことさえできます。

  3. 実際には、app.config構成ファイルはXMLファイルでした。したがって、XML設定プロバイダ(source on githubnuget link)を使用して設定を読み取ることができます。しかし、設定ソースとしてのみ使用されることを覚えておいてください。アプリの振る舞いがどのようなロジックで実装されるべきかをあなたは知っています。設定プロバイダはアプリの「設定」とポリシーを変更せず、ファイルからのデータの読み取りのみを行います。

+0

"githubのソース"リンクが壊れています – dimaaan

+0

@dimaaanもうこれ以上はありません。 –

5

Linux上でも、.NETのコア2.0でいつものSystem.Configurationを使用することが可能です。本試験例を試してみてください。

  1. .NET標準2.0ライブラリ(たとえばMyLib.dll
  2. 追加NuGetパッケージSystem.Configuration.ConfigurationManager v4.4.0を作成しました。このパッケージはメタパッケージNetStandard.Library v2.0.0には含まれていないので、このパッケージは必要です(変更が欲しい)
  3. ConfigurationSectionまたはConfigurationElementに由来するすべてのC#クラスはMyLib.dllになります。例えば、MyClass.csConfigurationSectionに由来し、MyAccount.csConfigurationElementに由来する。実装の詳細はここでは範囲外ですが、Google is your friend
  4. .NET Core 2.0アプリ(コンソールアプリケーションMyApp.dllなど)を作成してください。 .NET Frameworkのアプリケーションは、Frameworkの.exeではなく.dllで終わります。
  5. カスタム設定セクションでにapp.configを作成します。上記の#3のクラスデザインと明らかに一致するはずです。例えば:それだ
 
    <?xml version="1.0" encoding="utf-8"?> 
    <configuration> 
     <configSections> 
     <section name="myCustomConfig" type="MyNamespace.MyClass, MyLib" /> 
     </configSections> 
     <myCustomConfig> 
     <myAccount id="007" /> 
     </myCustomConfig> 
    </configuration> 

- あなたはapp.configをがMyApp以内に適切に解析され、うまくMyLib作品内の既存のコードされていることを見つけることができます。プラットフォームをWindows(dev)からLinux(test)に切り替える場合は、dotnet restoreを実行することを忘れないでください。

関連する問題