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

时间:2017-08-24 01:41:44

标签: c# .net-core .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核心标记。

2 个答案:

答案 0 :(得分:33)

正如Jehof所说,似乎没有任何变化。

正如Jeroen Mostert所说,

ConfigurationBuilder在它自己的包中。

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

总之,您需要以下两个NuGet包:

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

答案 1 :(得分:10)

在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 app时开始使用的依赖项。

<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>