Comment définir le chemin de base dans ConfigurationBuilder dans Core 2.0.
J'ai googlé et trouvé this question, this de Microsoft docs, et le 2. docs en ligne, mais ils semblent utiliser une version de Microsoft.Extension.Configuration
de 1.0.0-beta8 .
Je veux lire appsettings.json
. Existe-t-il une nouvelle manière de faire cela dans 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: En plus d'ajouter Microsoft.Extensions.Configuration.FileExtensions comme indiqué ci-dessous par Set J'avais également besoin d'ajouter Microsoft.Extensions.Configuration.Json pour obtenir l'extension AddJsonFile
.
La méthode d'extension SetBasePath
est définie dans Config.FileExtensions .
Vous devez ajouter une référence au package Microsoft.Extensions.Configuration.FileExtensions .
Pour résoudre AddJsonFile
, ajoutez une référence au package Microsoft.Extensions.Configuration.Json
.
Je développe une application console .NET Core 2 à l'aide de Visual Studio 2017 v15.5. Comme d'autres l'ont fait remarquer, après avoir ajouté Microsoft.Extensions.Configuration, je devais ajouter Microsoft.Extensions.Configuration.Json pour que l'appel AddJsonFile()
puisse fonctionner. Cela a également rendu la SetBasePath()
call work; donc je n'a pas besoin pour ajouter Configuration.FileExtensions. (Mon code est compilé et exécuté avec et sans.)
J'ai également eu un appel à AddEnvironmentVariables()
, pour lequel je devais ajouter Configuration.EnvironmentVariables. Mon code est le suivant:
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();
Fait intéressant, la seule déclaration using
dont j'avais besoin était using Microsoft.Extensions.Configuration
.
Utilisez à la fois 'Microsoft.Extensions.Configuration' et 'Microsoft.Extensions.Configuration.Json' pour résoudre le problème.
https://www.nuget.org/packages/Microsoft.Extensions.Configuration/https://www.nuget.org/packages/Microsoft.Extensions.Configuration.Json/
Voici l'exemple '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
} }