web-dev-qa-db-ja.com

.Net Standard 2.0 Class Libraryのユニバーサル構成ファイルはありますか?

ASP.Net Core 2.0プロジェクトでも使用するために、.Net Standard 2クラスライブラリに変換するクラスライブラリがあります。

ライブラリは、SMTP設定、接続文字列などの構成ファイル項目を常に読み取りました。

Webプロジェクトでは、これらの値はweb.configで見つかります。

Console/WinFormsでは、これらの値はapp.configで見つかります。

前の例と同じように「機能する」.Net Core 2.0プロジェクトに相当する構成ファイルはありますか?

答えはノーだと思いますが、ライブラリが組織全体で使用されているため、これを処理する最適な方法を探しているため、後方互換性を維持することが重要です。

21
Brad Bamford

System.Configuration.ConfigurationManager が.NETStandard 2.0に追加されたことが判明しました。

Nugetからプルして、。NETStandard 2.0クラスライブラリプロジェクトをコンパイルします。

次に、ライブラリは標準の構成ファイルを使用してプロジェクト間で機能します。

  • Net Core 2.0プロジェクトはapp.configを使用します
  • Webプロジェクトはweb.configから動作します
  • コンソールおよびWindowsアプリはapp.configで動作します
31
Brad Bamford

.Net Coreは、構成アプローチを大幅に改訂しました。

何らかの設定に値が必要な場合は、ConfigurationManager.AppSettings["someSetting"]を呼び出さなくなります。代わりに、ConfigurationBuilderを使用して、アプリケーションの起動時に構成をロードします。複数の構成ソース(jsonまたは/およびxml構成ファイル、環境変数、コマンドライン、Azure Key Vaultなど)が存在する可能性があります。

次に、構成を構築し、IOption<T>にラップされた厳密に型指定された設定オブジェクトを使用クラスに渡します。

仕組みの基本的な考え方は次のとおりです。

//  Application boostrapping

ConfigurationBuilder configurationBuilder = new ConfigurationBuilder();
configurationBuilder.AddJsonFile("AppSettings.json");
var configuration = configurationBuilder.Build();

//  IServiceCollection services

services.AddOptions();
services.Configure<SomeSettings>(configuration.GetSection("SomeSection"));

//  Strongly typed settings

public class SomeSettings
{
    public string SomeHost { get; set; }

    public int SomePort { get; set; }
}

//  Settings consumer

public class SomeClient : ISomeClient
{
    public SomeClient(IOptions<SomeSettings> someSettings)
    {
        var Host = someSettings.Value.SomeHost;
        var port = someSettings.Value.SomePort;
    }
}

//  AppSettings.json

{
  "SomeSection": {
    "SomeHost": "localhost",
    "SomePort": 25
  }
}

詳細については、記事 ASP.NET Coreアプリの構成 を確認してください。

下位互換性を維持するのが難しい(Wordが「不可能」になることを避けようとする)ことを恐れています。

7
CodeFuller