.net核心控制台项目中未包含appsettings.json文件

时间:2019-07-28 18:34:44

标签: .net asp.net-core .net-core

我了解.net核心已将app.config文件替换为appsetting.json。但是,似乎只为ASP.net项目添加了此文件。实际上,它甚至在添加项列表中都不可用。 我发现this帖子中列出了需要添加的软件包:

  
      
  1. Microsoft.Extensions.Configuration
  2.   
  3. Microsoft.Extensions.Configuration.FileExtensions
  4.   
  5. Microsoft.Extensions.Configuration.Json
  6.   

我添加了所有这些内容,它的确为我提供了添加json配置文件的选项,但仍然没有App Settings File,后者仅在ASP.Net Core下可用。 我试图理解为什么非Web项目不需要配置以及配置.net核心控制台应用程序的推荐方法是什么。 预先感谢。

1 个答案:

答案 0 :(得分:0)

非Web项目可能可能不需要配置。但是,您已经注意到,Visual Studio不会使用appsettings.json来支持控制台项目。显然,您可以将其作为json文件添加到项目中。一旦拥有它,挑战就是要利用它。我经常在实体框架实用程序中使用配置对象和依赖项注入。

例如

public static class Program
{
    private static IConfigurationRoot Configuration { get; set; }

    public static void Main()
    {
        IConfigurationBuilder builder = new ConfigurationBuilder()
            .AddJsonFile("appsettings.json")
            .AddEnvironmentVariables();
        Configuration = builder.Build();

        IServiceCollection services = new ServiceCollection();
        services.AddDbContext<MyDbContext>(options =>
            options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
        services.AddScoped<IMyService, MyService>();
        IServiceProvider provider = services.BuildServiceProvider();

        IMyService myService = provider.GetService<IMyService>();
        myService.SomeMethod();
    }

    public class TemporaryDbContextFactory : IDesignTimeDbContextFactory<MyDbContext>
    {
        public MyDbContext CreateDbContext(string[] args)
        {
            IConfigurationBuilder configBuilder = new ConfigurationBuilder()
                .AddJsonFile("appsettings.json")
                .AddEnvironmentVariables();
            IConfigurationRoot configuration = configBuilder.Build();
            DbContextOptionsBuilder<MyDbContext> builder = new DbContextOptionsBuilder<MyDbContext>();
            builder.UseSqlServer(configuration.GetConnectionString("DefaultConnection"));
            return new MyDbContext(builder.Options);
        }
    }
}

这允许我同时针对DbContext运行迁移基于控制台的实用程序。您无需指定所需的配置类型,因此这只是一个示例。但希望您可以根据需要进行调整。