Asp.net core appsettings.json文件不在.net核心控制台项目中
我知道.net core已将app.config文件替换为appsetting.json。但是,此文件似乎仅为ASP.net项目添加。事实上,它甚至在“添加项目”列表中都不可用。 我发现这篇文章列出了需要添加的软件包:Asp.net core appsettings.json文件不在.net核心控制台项目中,asp.net-core,.net-core,Asp.net Core,.net Core,我知道.net core已将app.config文件替换为appsetting.json。但是,此文件似乎仅为ASP.net项目添加。事实上,它甚至在“添加项目”列表中都不可用。 我发现这篇文章列出了需要添加的软件包: Microsoft.Extensions.Configuration Microsoft.Extensions.Configuration.FileExtensions Microsoft.Extensions.Configuration.Json 我添加了所有这些,它确实提供了
应用程序设置文件
,该文件仅在ASP.Net Core下可用。
我试图理解为什么非web项目不需要配置,以及配置.net核心控制台应用程序的推荐方法。
提前感谢。非web项目可能需要配置,也可能不需要配置。但是,正如您所注意到的,VisualStudio没有将控制台项目与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);
}
}
}
公共静态类程序
{
专用静态IConfigurationRoot配置{get;set;}
公共静态void Main()
{
IConfigurationBuilder=新配置生成器()
.AddJsonFile(“appsettings.json”)
.AddenEnvironmentVariables();
Configuration=builder.Build();
IServiceCollection服务=新的ServiceCollection();
services.AddDbContext(选项=>
options.UseSqlServer(Configuration.GetConnectionString(“DefaultConnection”));
services.addScope();
IServiceProvider=services.BuildServiceProvider();
IMyService myService=provider.GetService();
myService.SomeMethod();
}
公共类TemporaryDbContextFactory:IDesignTimeDbContextFactory
{
公共MyDbContext CreateDbContext(字符串[]args)
{
IConfigurationBuilder configBuilder=新的ConfigurationBuilder()
.AddJsonFile(“appsettings.json”)
.AddenEnvironmentVariables();
IConfigurationRoot配置=configBuilder.Build();
DbContextOptionsBuilder=新的DbContextOptionsBuilder();
builder.UseSqlServer(configuration.GetConnectionString(“DefaultConnection”);
返回新的MyDbContext(builder.Options);
}
}
}
这使我能够针对DbContext运行迁移和基于控制台的实用程序。您没有指定需要什么样的配置,所以这只是一个示例。但希望您能根据自己的需要进行调整。谢谢Felix。就是这样。我将继续添加一个名为appsettings.json的文件,并希望DXN将其视为框架appsetting.json文件。您猜对了,我正在编写一个基于数据库的非UI程序,并且正在使用linq2DB库,为此我必须初始化LinqToDB.Data.DataConnection()对象。但是,问题与我预期的相同。我可以添加具有此名称的文件。但是运行时抛出一个FieloToFunExtExcCEP,因为虽然该文件存在于项目中,但运行时没有将其视为正式文件,也没有将其复制到运行时路径(bin /Debug /NETCOREAPP2.2)中。方法不是IConfigurationBuilder接口的一部分。我不得不把这行注释掉。是的,您需要手动复制文件(至少我不知道如何将复制放入管道,尽管可能有办法)。如果您正在使用环境变量,请添加
Microsoft.Extensions.Configuration.EnvironmentVariables
。如果不是-只需删除调用即可避免FileNotFoundException。请确保将文件的“复制到输出目录”属性更改为“始终复制”或“如果更新,则复制”。这将把文件复制到运行时路径。