web-dev-qa-db-ja.com

コンソールアプリ.net Core 2.0の構成

.net Core 1では、これを行うことができました。

IConfiguration config =  new ConfigurationBuilder()
                .AddJsonFile("appsettings.json", true, true)
                .Build();

そして、それにより、コンソールアプリで使用できるConfigurationオブジェクトが使用できるようになりました。

.net core 2.0のすべての例は、Asp.Net core configの新しい作成方法に合わせて調整されているようです。

コンソールアプリの構成を作成する方法は何ですか?

更新:この質問は、Asp.netコアとは関係ありません。編集時にasp.netコアタグを追加しないでください。

31
zaitsman

Jehofが言うように、変化はないようです。

Jeroen Mostertによると、ConfigurationBuilderは独自のパッケージに含まれています。

ただし、Microsoft.Extensions.Configuration.Jsonパッケージも持っていることを確認してください。このパッケージには、.AddJsonFile()拡張機能があります。

要約すると、次の2つのNuGetパッケージが必要です。

  • Microsoft.Extensions.Configuration(2.0.0)
  • Microsoft.Extensions.Configuration.Json(2.0.0)
34

Program.csにprivate static IServiceProvider provider;を保存します。次に、aps.netコアの場合と同じように構成をセットアップしますが、もちろんMain()で構成します。次に、IServiceProvider内の各セクションを構成します。この方法で、コンストラクター依存性注入を使用できます。また、骨抜きの例には2つの構成があることに注意してください。 1つには、ソース管理から外してプロジェクト構造の外部に保存する必要がある秘密が含まれており、プライベートに保つ必要のない標準構成設定を含むAppSettingsがあります(重要です!)

Configを使用する場合は、プロバイダーから設定を取得するか、コンストラクターで設定クラスを使用するプロバイダーからオブジェクトを取得できます。

    private static IServiceProvider provider;
    private static EventReceiver receiver;
    static void Main(string[] args)
    {
        IConfigurationRoot config = new ConfigurationBuilder().SetBasePath(Directory.GetCurrentDirectory())
            .AddJsonFile(path: "/opt/Secrets.json", optional: false, reloadOnChange: true)
            .AddJsonFile(path: "AppSettings.json", optional: false, reloadOnChange: true)
            .Build();
        provider = new ServiceCollection()
            .AddSingleton<CancellationTokenSource>()
            .Configure<Settings>(config.GetSection("SettingsSection"))
            .BuildServiceProvider();
        receiver = new EventReceiver<Poco>(ProcessPoco);
        provider.GetRequiredService<CancellationTokenSource>().Token.WaitHandle.WaitOne();
    }

    private static void ProcessPoco(Poco poco)
    {
        IOptionsSnapshot<Settings> settings = provider.GetRequiredService<IOptionsSnapshot<Settings>>();
        Console.WriteLine(settings.ToString());
     }

これらは、dotnetcore cliアプリを作成するときに最初に推奨する依存関係です。

<PackageReference Include="Microsoft.Extensions.Configuration" Version="2.0.0" />
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="2.0.0" />
<PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="2.0.0" />
<PackageReference Include="Microsoft.Extensions.Logging" Version="2.0.0" />
<PackageReference Include="Microsoft.extensions.logging.abstractions" Version="2.0.0" />

また、設定をパブリッシュおよびビルドディレクトリにコピーする必要があることに注意してください。これを行うには、csprojファイルにターゲットを追加します。

  <Target Name="CopyToOut" BeforeTargets="BeforeBuild">
    <Copy SourceFiles="../ProjPath/AppSettings.json" DestinationFolder="$(TargetDir)" SkipUnchangedFiles="true" />
  </Target>
  <Target Name="CopyToOutOnPublish" AfterTargets="Publish">DestinationFolder="$(PublishDir)" SkipUnchangedFiles="true" />
    <Copy SourceFiles="../ProjPath/AppSettings.json" DestinationFolder="$(PublishDir)" SkipUnchangedFiles="true" />
  </Target>
10
Theyouthis