Core 2.0'da ConfigurationBuilder'da SetBasePath Nasıl Ayarlanır


143

Temel 2.0'ı Core 2.0'daki ConfigurationBuilder'da nasıl ayarlayabilirim.

Ben googled ve bulduk bu soruyu, bu Microsoft dokümanlardan ve 2,0 çevrimiçi dokümanlardan ancak bir sürümünü kullanıyor görünüyor Microsoft.Extension.Configurationden 1.0.0-beta8 .

Okumak istiyorum appsettings.json. Core 2.0'da bunu yapmanın yeni bir yolu var mı?

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

GÜNCELLEME: Uzantıyı almak için Microsoft.Extensions.Configuration.FileExtensions'ı aşağıda belirtilen Set I'de gösterildiği gibi eklemeye ek olarak Microsoft.Extensions.Configuration.Json'u da eklemeniz gerekiyordu .AddJsonFile


2
GÜNCELLEME işi ​​yaptı!
Chris Rosete

2
Microsoft.Extensions.Configuration.Jsonbağımlılığı vardır Microsoft.Extensions.Configuration.FileExtensions, bu yüzden sadece öncekine ihtiyacınız vardır.
Johan B

Arkadaşlar, LÜTFEN DİKKAT, AddJsonFile("appsettings.json")yöntem barındırma ortamınızın farkında değil! .AddJsonFile($"appsettings.{_hostingEnvironment.EnvironmentName}.json")Bunun yerine kullanın . : D
Jess

Yanıtlar:


302

SetBasePathUzantı yöntemi tanımlanır Config.FileExtensions .

Microsoft.Extensions.Configuration.FileExtensions paketine bir başvuru eklemeniz gerekir .

Çözümlemek AddJsonFileiçin Microsoft.Extensions.Configuration.Jsonpakete bir başvuru ekleyin .


36
Ancak şimdi "AddJsonFile" yöntemi bulunamadı. : DI bu paketi de eklemek zorundaydı: "Microsoft.Extensions.Configuration.Json".
Tadej

5
Microsoft.Extensions.Configuration.Jsonbağımlılığı vardır Microsoft.Extensions.Configuration.FileExtensions, bu yüzden sadece öncekine ihtiyacınız vardır.
Johan B

61

Visual Studio 2017 v15.5 kullanarak bir .NET Core 2 konsol uygulaması geliştiriyorum. Diğerleri belirttiği gibi, Microsoft.Extensions.Configuration ekledikten sonra AddJsonFile()çağrıyı işe almak için Microsoft.Extensions.Configuration.Json eklemek gerekiyordu . Bu aynı zamanda SetBasePath()çağrıyı da yaptı ; bu yüzden Configuration.FileExtensions eklememe gerek yoktu . (Kodum hem onunla hem de onsuz derlenir ve çalışır.)

Ayrıca AddEnvironmentVariables()Configuration.EnvironmentVariables eklemek için gereken bir çağrı vardı . Kodum aşağıdaki gibidir:

  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();

İlginç bir şekilde, ihtiyacım olan tek usingifade using Microsoft.Extensions.Configuration.


11
Sınıf dosyasında gerekli olan tek kullanımlık ifade Microsoft.Extensions.Configuration olmalıdır. Ancak, projeye NuGet Paketlerini Yönet proje seçeneği aracılığıyla açıkça "Microsoft.Extensions.Configuration.Json" adlı NuGet bağımlılığını eklemelisiniz. Bunun bir bağımlılığı "Microsoft.Extensions.Configuration.FileExtensions" dır ve bu nedenle bağımlılık telinin bir parçası olarak dahil edilecektir. Bu iki bağımlılık hem "SetBasePath" hem de "AddJsonFile" derleme hatalarını çözecektir.
gregsonian

Mac için VS Preview 8'in şu anki dizini bin / netcoreapp2x olarak ayarladığını belirtmek gerekir
Chris Becke

Bilgiçlikten değil ama Configuration.EnvironmentVariables== Microsoft.Extensions.Configuration.EnvironmentVariables. Benzer isimlere sahip birkaç şey var.
Lee Richardson

12

Hem 'Microsoft.Extensions.Configuration' hem de 'Microsoft.Extensions.Configuration.Json' öğelerini kullanın, bu sorunu çözecektir.

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

İşte 'ConnectionFactory' örneği

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
} }
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.