如何在Core 2.0中的ConfigurationBuilder中设置基本路径.
我用Google搜索,发现这个问题,这个来自微软的文档,以及2.0文档在线,但他们似乎使用的版本Microsoft.Extension.Configuration从1.0.0-beta8.
我想读appsettings.json.在Core 2.0中有没有新的方法?
using System;
using System.IO;
using Microsoft.Extensions.Configuration;
namespace ConsoleApp2
{
class Program
{
public static IConfigurationRoot Configuration { get; set; }
static void Main(string[] args)
{
var builder = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory()) // <== compile failing here
.AddJsonFile("appsettings.json");
Configuration = builder.Build();
Console.WriteLine(Configuration.GetConnectionString("con"));
Console.WriteLine("Press a key...");
Console.ReadKey();
}
}
}
Run Code Online (Sandbox Code Playgroud)
appsetting.json
{
"ConnectionStrings": {
"con": "connection string"
}
}
Run Code Online (Sandbox Code Playgroud)
更新: 除了添加Microsoft.Extensions.Configuration.FileExtensions如下图所示的设置我还需要添加 …
升级到ASP.NET Core 2.0后,我似乎无法再创建迁移.
我越来越
"在类'Program'上调用方法'BuildWebHost'时发生错误.继续没有应用服务提供者.错误:发生了一个或多个错误.(无法打开登录请求的数据库"...".登录失败.登录用户'...'失败
和
"无法创建'MyContext'类型的对象.将'IDesignTimeDbContextFactory'的实现添加到项目中,或者参见 https://go.microsoft.com/fwlink/?linkid=851728以获取在设计时支持的其他模式."
我之前运行的命令是$ dotnet ef migrations add InitialCreate --startup-project "..\Web"(来自带有DBContext的项目/文件夹).
连接字符串: "Server=(localdb)\\mssqllocaldb;Database=database;Trusted_Connection=True;MultipleActiveResultSets=true"
这是我的Program.cs
public class Program
{
public static void Main(string[] args)
{
BuildWebHost(args).Run();
}
public static IWebHost BuildWebHost(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>()
.Build();
}
Run Code Online (Sandbox Code Playgroud) c# entity-framework-core asp.net-core-mvc asp.net-core asp.net-core-2.0
我正在使用VS Ultimate 2015 Preview开发一个ASP.NET 5 WebAPI项目.我正在尝试以这种方式配置应用程序(行号只是指南):
1 using Microsoft.Framework.ConfigurationModel;
2
3 public IConfiguration Configuration { get; private set; }
4
5 public Startup()
6 {
7 Configuration = new Configuration()
8 .AddJsonFile("config.json")
9 .AddEnvironmentVariables();
10 }
Run Code Online (Sandbox Code Playgroud)
第8行给出了一个错误:'Configuration'不包含'AddJsonFile'的定义......
怎么了?.
c# configuration configuration-files config.json asp.net-core
我有问题.我需要在.Net Core(C#)中编写一个使用app.config的程序,如下所示:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="custom" type="ConfigurationSample.CustomConfigurationSection, ConfigurationSample"/>
</configSections>
<connectionStrings>
<add name="sampleDatabase" connectionString="Data Source=localhost\SQLExpress;Initial Catalog=SampleDatabase;Integrated Security=True"/>
</connectionStrings>
<appSettings>
<add key="sampleApplication" value="Configuration Sample"/>
</appSettings>
<custom>
<customConfigurations>
<add key="customSample" name="Mickey Mouse" age="83"/>
</customConfigurations>
</custom>
</configuration>
Run Code Online (Sandbox Code Playgroud)
我写道:
string connectionString = ConfigurationManager.ConnectionStrings["sampleDatabase"].ConnectionString;
Console.WriteLine(connectionString);
// read appSettings configuration
string appSettingValue = ConfigurationManager.AppSettings["sampleApplication"];
Console.WriteLine(appSettingValue);
Run Code Online (Sandbox Code Playgroud)
它是来自互联网的例子,所以我认为会工作,但我得到例外:
System.Configuration.ConfigurationErrorsException: 'Error Initializing the configuration system.'
Inner Exception
TypeLoadException: Could not load type 'System.Configuration.InternalConfigurationHost' from assembly 'CoreCompat.System.Configuration, Version=4.2.3.0, Culture=neutral, PublicKeyToken=null' because the method 'get_bundled_machine_config' has no implementation …Run Code Online (Sandbox Code Playgroud) 老实说,我不敢相信这有多难......首先是我要求的要求:
IDesignTimeDbContextFactory,IDbContextFactory被重命名为开发人员不会混淆它的作用appsettings.json不止一次加载.一个原因是因为我的迁移是在域中运行的,MyClassLibrary.Data并且appsettings.js该类库中没有文件,我不得不这样做Copy to Output Directory appsettings.js.另一个原因是它不是很优雅.所以这就是我目前的工作方式:
using System;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Design;
using Microsoft.Extensions.Configuration;
using AppContext = Tsl.Example.Data.AppContext;
namespace Tsl.Example
{
public class DesignTimeDbContextFactory : IDesignTimeDbContextFactory<AppContext>
{
public AppContext CreateDbContext(string[] args)
{
string basePath = AppDomain.CurrentDomain.BaseDirectory;
string envName = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT");
IConfigurationRoot configuration = new ConfigurationBuilder()
.SetBasePath(basePath)
.AddJsonFile("appsettings.json")
.AddJsonFile($"appsettings.{envName}.json", true)
.Build();
var builder = new DbContextOptionsBuilder<AppContext>();
var connectionString = configuration.GetConnectionString("DefaultConnection");
builder.UseMySql(connectionString);
return new AppContext(builder.Options);
}
} …Run Code Online (Sandbox Code Playgroud) 我试图从.NET Core 2.0 MVC应用程序的包管理器控制台运行Add-Migration InitialCreate命令.在查看所有可能的来源之后仍然无法解决错误描述的问题:
PM> Add-Migration InitialCreate
Run Code Online (Sandbox Code Playgroud)
在类'Program'上调用方法'BuildWebHost'时发生错误.继续没有应用程序服务提供商.错误:找不到方法:C:\ Users\Neha\source\repos\MvcMovie\MvcMovie\Data\MvcMovieContext.cs中的'System.Collections.Generic.Dictionary
2<System.String,System.Object> Microsoft.Extensions.Configuration.IConfigurationBuilder.get_Properties()'. System.IO.FileLoadException: Could not load file or assembly 'System.Diagnostics.DiagnosticSource, Version=4.0.2.1, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51'. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040) File name: 'System.Diagnostics.DiagnosticSource, Version=4.0.2.1, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51' at Microsoft.EntityFrameworkCore.Infrastructure.EntityFrameworkServicesBuilder.TryAddCoreServices() at Microsoft.Extensions.DependencyInjection.SqlServerServiceCollectionExtensions.AddEntityFrameworkSqlServer(IServiceCollection serviceCollection) at Microsoft.EntityFrameworkCore.Infrastructure.Internal.SqlServerOptionsExtension.ApplyServices(IServiceCollection services) at Microsoft.EntityFrameworkCore.Internal.ServiceProviderCache.ApplyServices(IDbContextOptions options, ServiceCollection services) at Microsoft.EntityFrameworkCore.Internal.ServiceProviderCache.<>c__DisplayClass4_0.<GetOrAdd>b__2(Int64 k) at System.Collections.Concurrent.ConcurrentDictionary2.GetOrAdd(TKey键,Func2 valueFactory) at Microsoft.EntityFrameworkCore.DbContext..ctor(DbContextOptions options) at MvcMovie.Models.MvcMovieContext..ctor(DbContextOptions1选项):第12行at MvcMovie.ToDoContextFactory.CreateDbContext(String [] args)位于C:\ Users\Neha\source\repos\MvcMovie\MvcMovie\ToDoContextFactory.cs:第17行,位于Microsoft.EntityFrameworkCore.Design.Internal.DbContextOperations.CreateContext(Func1 factory) at Microsoft.EntityFrameworkCore.Design.Internal.DbContextOperations.CreateContext(String contextType) …
我正在尝试在 .NET 标准 2.0类库中使用迁移 EFCore2.0,到目前为止我有类似的东西
public class SomeContextFactory : IDesignTimeDbContextFactory<SomeContext>
{
private Configuration _configuration;
public SomeContextFactory(Configuration configuration)
{
_configuration = configuration;
}
public SomeContext CreateDbContext(string[] args)
{
var optionsBuilder = new DbContextOptionsBuilder<SomeContext>();
optionsBuilder.UseSqlServer(_configuration.ConnectionString);
return new SomeContext(optionsBuilder.Options);
}
}
public class SomeContext : DbContext
{
public DbSet<SomeDbModel> Some { get; set; }
public SomeContext(DbContextOptions<SomeContext> options) : base(options)
{
}
}
Run Code Online (Sandbox Code Playgroud)
关键是连接字符串因环境(dev、test、prod)而异,迁移应该在Configuration.
如何请示迁移注入Configuration到SomeContextFactory?
在我的解决方案中,我有一个 ASP.NET Core Web 项目和一个 .NET Standard 类库项目。类库项目是数据访问层,我想从我的数据访问层中的 appsettings.json(ASP.NET Core 项目)读取连接字符串。
我找到了几个答案,例如Andrii Litvinov看起来很容易实现,但他也提到了通过依赖注入来实现。我不想选择简单的快捷方式而是寻找依赖注入实现?
我不确定在我的类库中是否有 appsettings.json 然后通过 IConfigurationRoot 注册它是更好的选择(如JRB 在此解释)但在我的场景中,连接字符串位于 web 项目的 appsettings.json 文件中,并且我不想在我的类库项目中使用构造函数依赖注入实现来使用连接字符串。
c# connection-string dependency-injection class-library asp.net-core-2.0
我在 appsettings.json 文件中定义了一个连接字符串。现在我想在我的 TextDBConext 文件中读取它,我该怎么做?
public class TestContext: DbContext
{
public DbSet<TestTable> TestTable { get; set; }
public TestContext()
{
}
public IConfiguration Configuration { get; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseSqlServer("Connection string"); //I have hardcoded here, but I want from appsettings.json
}
}
Run Code Online (Sandbox Code Playgroud)
Appsettings.json 文件:
{
"Logging": {
"LogLevel": {
"Default": "Warning"
}
},
"AllowedHosts": "*",
"ConnectionStrings": {
"connection_string": "Connection String"
}
}
Run Code Online (Sandbox Code Playgroud)