Bagaimana cara mengatur jalur dasar di ConfigurationBuilder di Core 2.0.
Saya telah mencari di Google dan menemukan pertanyaan ini , ini dari dokumen Microsoft, dan dokumen 2.0 online tetapi tampaknya mereka menggunakan versi Microsoft.Extension.Configuration
dari 1.0.0-beta8 .
Saya ingin membaca appsettings.json
. Apakah ada cara baru untuk melakukan ini di 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:
Selain menambahkan Microsoft.Extensions.Configuration.FileExtensions seperti yang ditunjukkan di bawah ini oleh Set I juga perlu menambahkan Microsoft.Extensions.Configuration.Json untuk mendapatkan AddJsonFile
ekstensi.
c#
asp.net-core
configuration
.net-core
Padhraic
sumber
sumber
Microsoft.Extensions.Configuration.Json
memiliki ketergantunganMicrosoft.Extensions.Configuration.FileExtensions
, jadi Anda hanya perlu yang pertama.AddJsonFile("appsettings.json")
metode ini tidak mengetahui lingkungan hosting Anda! Gunakan.AddJsonFile($"appsettings.{_hostingEnvironment.EnvironmentName}.json")
sebagai gantinya. : DJawaban:
The
SetBasePath
metode ekstensi didefinisikan dalam Config.FileExtensions .Anda perlu menambahkan referensi ke paket Microsoft.Extensions.Configuration.FileExtensions .
Untuk mengatasi
AddJsonFile
, tambahkan referensi keMicrosoft.Extensions.Configuration.Json
paket.sumber
Microsoft.Extensions.Configuration.Json
memiliki ketergantunganMicrosoft.Extensions.Configuration.FileExtensions
, jadi Anda hanya perlu yang pertama.Saya mengembangkan aplikasi konsol .NET Core 2 menggunakan Visual Studio 2017 v15.5. Seperti yang telah dicatat orang lain, setelah menambahkan Microsoft.Extensions.Configuration saya perlu menambahkan Microsoft.Extensions.Configuration.Json agar
AddJsonFile()
panggilan tersebut berfungsi. Ini juga membuatSetBasePath()
panggilan itu berhasil; jadi saya tidak perlu menambahkan Configuration.FileExtensions . (Kode saya mengkompilasi dan berjalan dengan dan tanpa itu.)Saya juga mendapat panggilan ke
AddEnvironmentVariables()
, dan saya perlu menambahkan Configuration.EnvironmentVariables. Kode saya adalah sebagai berikut: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();
Menariknya, satu-satunya
using
pernyataan yang saya butuhkan adalahusing Microsoft.Extensions.Configuration
.sumber
Configuration.EnvironmentVariables
==Microsoft.Extensions.Configuration.EnvironmentVariables
. Ada beberapa hal yang namanya mirip.Gunakan 'Microsoft.Extensions.Configuration' dan 'Microsoft.Extensions.Configuration.Json' ini akan menyelesaikan masalah.
https://www.nuget.org/packages/Microsoft.Extensions.Configuration/ https://www.nuget.org/packages/Microsoft.Extensions.Configuration.Json/
Berikut adalah contoh '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 } }
sumber