2017-10-20 31 views
12

如何在Core 2.0中的ConfigurationBuilder中设置基础路径。如何在Configuration Builder中设置核心2.0中的基础路径

我用Google搜索,发现this问题,this来自微软的文档,以及2.0文档在线,但他们似乎可以用一个版本的Microsoft.Extension.Configuration1.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(); 
     } 
    } 
} 

appsetting.json

{ 
    "ConnectionStrings": { 
    "con": "connection string" 
    } 
} 

UPDATE: 以及增加Miscrosoft.Extension.Configuration.FileExtenson通过Set我还需要指示添加Microsoft.Extensions.Configuration.Json得到AddJsonFile扩展。

回答

5

我正在使用Visual Studio 2017 v15.5开发.NET Core 2控制台应用程序。正如其他人所指出的,添加Microsoft.Extensions.Configuration后,我需要添加Microsoft.Extensions.Configuration.Json以使AddJsonFile()调用正常工作。这也使SetBasePath()调用工作;所以我不需要添加Configuration.FileExtensions。 (我的代码编译并同时运行和不运行。)

我也打了电话AddEnvironmentVariables(),为此我需要添加Configuration.EnvironmentVariables。我的代码如下:

var builder = new ConfigurationBuilder() 
        .SetBasePath(Directory.GetCurrentDirectory()) // requires Microsoft.Extensions.Configuration.Json 
        .AddJsonFile("appsettings.json") // requires Microsoft.Extensions.Configuration.Json 
        .AddEnvironmentVariables(); // requires Microsoft.Extensions.Configuration.EnvironmentVariables 
    Configuration = builder.Build(); 

有趣的是,只有using声明我需要的是using Microsoft.Extensions.Configuration

1

使用'Microsoft.Extensions.Configuration'和'Microsoft.Extensions.Configuration.Json'这将解决这个问题。

https://www.nuget.org/packages/Microsoft.Extensions.Configuration/ https://www.nuget.org/packages/Microsoft.Extensions.Configuration.Json/

这里是样本 '连接工厂'

using System.Data; 
using System.Data.SqlClient; 
using Microsoft.Extensions.Configuration; 
using System.IO; 

namespace DataAccess.Infrastructure 
{ 
public class ConnectionFactory : IConnectionFactory 
{ 
    public ConnectionFactory() 
    { 
     var builder = new ConfigurationBuilder().SetBasePath(Directory.GetCurrentDirectory()).AddJsonFile("appsettings.json"); 
     Configuration = builder.Build(); 
    } 


    public IConfigurationRoot Configuration { get; } 
    public IDbConnection GetConnection 
    { 
     get 
     { 
      var connectionString = Configuration.GetConnectionString("DefaultConnection"); 
      var conn = new SqlConnection(connectionString); 
      conn.Open(); 
      return conn; 
     } 
    } 

    #region IDisposable Support 
    private bool disposedValue = false; // To detect redundant calls 

    protected virtual void Dispose(bool disposing) 
    { 
     if (!disposedValue) 
     { 
      if (disposing) 
      { 
       // TODO: dispose managed state (managed objects). 
      } 


      // TODO: free unmanaged resources (unmanaged objects) and override a finalizer below. 
      // TODO: set large fields to null. 

      disposedValue = true; 
     } 
    } 

    // TODO: override a finalizer only if Dispose(bool disposing) above has code to free unmanaged resources. 
    // ~ConnectionFactory() { 
    // // Do not change this code. Put cleanup code in Dispose(bool disposing) above. 
    // Dispose(false); 
    // } 

    // This code added to correctly implement the disposable pattern. 
    public void Dispose() 
    { 
     // Do not change this code. Put cleanup code in Dispose(bool disposing) above. 
     Dispose(true); 
     // TODO: uncomment the following line if the finalizer is overridden above. 
     // GC.SuppressFinalize(this); 
    } 
    #endregion 
} }