控制台应用程序 .net Core 2.0 的配置

Configuration for console apps .net Core 2.0

在 .net Core 1 中我们可以这样做:

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

然后我们可以在我们的控制台应用程序中使用 Configuration 对象。

.net core 2.0 的所有示例似乎都是针对 Asp.Net 核心配置的新创建方式量身定制的。

如何为控制台应用程序创建配置?

更新:这个问题与Asp.net核心无关。编辑时请不要添加asp.net核心标签

Jehof 说的好像没有变化

正如 Jeroen Mostert 所说,ConfigurationBuilder 在它自己的包中。

但请确保您还有 Microsoft.Extensions.Configuration.Json 包,其中包含 .AddJsonFile() 扩展。

综上所述,您需要以下两个 NuGet 包:

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

在您的 Program.cs 中存储一个 private static IServiceProvider provider;。然后像在 aps.net 内核中一样设置配置,当然你会在 Main() 中进行。然后在 IServiceProvider 中配置每个部分。这样你就可以使用构造函数依赖注入。另请注意,我在淡化示例中有两个配置。一个包含应远离源代码控制并存储在项目结构之外的秘密,我有 AppSettings,其中包含不需要保密的标准配置设置。(这很重要!)

当您想使用配置时,您可以将其从提供程序中取出,或者从提供程序中提取一个对象,在其构造函数中使用您的设置类。

    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>