如何在 Core 2.0的 ConfigurationBuilder 中设置 SetBasePath

如何在 Core 2.0中的 ConfigurationBuilder 中设置基路径。

我已经谷歌和发现的 这个问题,从微软文档的 这个,和 2.0文档在线,但他们似乎是使用从 1.0.0-beta8的一个版本的 Microsoft.Extension.Configuration

我想阅读 appsettings.json。在 Core2.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();
}
}
}

适应 Json

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

更新: 除了增加 微软。扩展。配置。文件扩展,如下所示由 预备我还需要增加 微软。扩展。配置。 Json,以获得 AddJsonFile扩展。

124434 次浏览

SetBasePath扩展方法在 配置文件扩展名中定义。

您需要添加对 微软。扩展。配置。文件扩展包的引用。

要解析 AddJsonFile,请添加对 Microsoft.Extensions.Configuration.Json包的引用。

我正在开发一个。NET Core 2控制台应用程序使用 Visual Studio 2017 v15.5。正如其他人所指出的,在加入微软之后。分机。配置我需要添加微软。分机。配置。让 Json 接通 AddJsonFile()的电话。这也使得 SetBasePath()调用工作; 所以我 不需要添加 配置文件扩展名。(我的代码编译并运行,包括使用和不使用它的代码。)

我还调用了 AddEnvironmentVariables(),为此我需要添加 Configuration。环境变量。我的代码如下:

  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

同时使用‘ Microsoft.Extensions.Configuration’和‘ Microsoft.Extensions.Configuration. Json’,这将解决问题。

Https://www.nuget.org/packages/microsoft Https://www.nuget.org/packages/microsoft。扩展。配置。 Json/

下面是示例“ ConnectionFactory”

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
} }

在添加引用之后,如果您仍然无法获得 JSON 的内容。

转到 JSON 的属性(右键单击 JSON file > properties) 将“复制到输出目录”更改为“始终复制”

检查屏幕截图