首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在Core2.0的ConfigurationBuilder中使用SetBasePath

如何在Core2.0的ConfigurationBuilder中使用SetBasePath
EN

Stack Overflow用户
提问于 2017-10-20 14:20:09
回答 3查看 105.1K关注 0票数 178

如何在Core2.0的ConfigurationBuilder中设置基本路径。

我在谷歌上找到了this question,微软文档中的this,以及在线上的2.0文档,但他们似乎使用的是1.0.0-beta8Microsoft.Extension.Configuration版本。

我想读appsettings.json。在Core2.0中有没有一种新的方式来实现这一点?

代码语言:javascript
运行
复制
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

代码语言:javascript
运行
复制
{
  "ConnectionStrings": {
    "con": "connection string"
  }
}

更新:除了添加Microsoft.Extensions.Configuration.FileExtensions之外,我还需要添加Microsoft.Extensions.Configuration.Json来获得AddJsonFile扩展。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-10-20 14:35:24

Config.FileExtensions中定义了SetBasePath扩展方法。

您需要添加对Microsoft.Extensions.Configuration.FileExtensions包的引用。

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

票数 383
EN

Stack Overflow用户

发布于 2017-12-31 04:49:53

我正在使用Visual Studio2017v15.5开发一个.NET Core2控制台应用程序。正如其他人所指出的,在添加Microsoft.Extensions.Configuration之后,我需要添加Microsoft.Extensions.Configuration.Json才能使AddJsonFile()调用工作。这也使得SetBasePath()调用可以工作;因此,添加Configuration.FileExtensions时,我不需要来使用。(我的代码在使用和不使用它的情况下都可以编译和运行。)

我还调用了AddEnvironmentVariables(),为此我需要添加Configuration.EnvironmentVariables。我的代码如下:

代码语言:javascript
运行
复制
  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

票数 72
EN

Stack Overflow用户

发布于 2018-01-05 15:11:14

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

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

下面是'ConnectionFactory‘示例

代码语言:javascript
运行
复制
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
} }
票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46843367

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档