【问题标题】:appsettings.json file not in .net core console projectappsettings.json 文件不在 .net 核心控制台项目中
【发布时间】:2019-12-06 04:57:01
【问题描述】:

我了解 .net 核心已将 app.config 文件替换为 appsetting.json。然而,这个文件似乎只为 ASP.net 项目添加。事实上,它甚至在添加项目列表中都不可用。 我发现this 发布了需要添加的列表包:

  1. Microsoft.Extensions.Configuration
  2. Microsoft.Extensions.Configuration.FileExtensions
  3. Microsoft.Extensions.Configuration.Json

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

【问题讨论】:

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


    【解决方案1】:

    非网络项目可能可能不需要需要配置。但是,正如您所注意到的,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 运行迁移基于控制台的实用程序。你没有指定你需要什么样的配置——所以这只是一个例子。但希望您可以根据自己的需要进行调整。

    【讨论】:

    • 谢谢菲利克斯。所以这就是它的方式。我将继续添加一个名为 appsettings.json 的文件,并希望 DXN 将其视为框架 appsettings.json 文件。你猜对了,我正在编写一个非 UI、基于数据库的程序,并且我正在使用 linq2DB 库,我必须为其初始化 LinqToDB.Data.DataConnection() 对象。
    • 但是和我预期的一样的问题。我可以添加一个具有此名称的文件。但是运行时会抛出 FileNotFoundException,因为尽管该文件存在于项目中,但运行时并不认为它是官方文件,也没有将其复制到它现在正在查找的运行时路径 (bin/Debug/netcoreapp2.2) 中.
    • 另外,在我的机器上,AddEnvironmentVariables() 方法不是 IConfigurationBuilder 接口的一部分。我不得不评论这条线。
    • 是的,您需要手动复制文件(至少我不知道如何将复制放入管道中,尽管可能有 一种方法)。如果您使用环境变量,则添加Microsoft.Extensions.Configuration.EnvironmentVariables。如果没有 - 只需删除呼叫
    • 为避免 FileNotFoundException,请确保将文件的“复制到输出目录”属性更改为“始终复制”或“如果更新则复制”。这会将文件复制到运行时路径。
    猜你喜欢
    • 1970-01-01
    • 2019-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-12
    • 2020-02-29
    • 1970-01-01
    • 2021-11-15
    相关资源
    最近更新 更多