services read net iservicecollection injection iconfiguration dependency configureservices configurationbuilder asp c# asp.net-core configuration .net-core

c# - read - Cómo SetBasePath en ConfigurationBuilder en Core 2.0



iconfiguration (3)

¿Cómo puedo establecer la ruta base en ConfigurationBuilder en Core 2.0?

Busqué en Google y encontré this pregunta, this de los documentos de Microsoft, y los documentos 2.0 línea, pero parecen estar usando una versión de Microsoft.Extension.Configuration de 1.0.0-beta8 .

Quiero leer appsettings.json . ¿Hay una nueva forma de hacer esto en 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" } }

ACTUALIZACIÓN: Además de agregar Microsoft.Extensions.Configuration.FileExtensions como se indica a continuación mediante Set , también necesitaba agregar Microsoft.Extensions.Configuration.Json para obtener la extensión AddJsonFile .



Estoy desarrollando una aplicación de consola .NET Core 2 con Visual Studio 2017 v15.5. Como otros han señalado, después de agregar Microsoft.Extensions.Configuration, necesitaba agregar Microsoft.Extensions.Configuration.Json para que la llamada AddJsonFile() funcione. Esto también hizo que la llamada SetBasePath() funcionara; así que no necesité agregar Configuration.FileExtensions . (Mi código se compila y se ejecuta con y sin él).

También tuve una llamada a AddEnvironmentVariables() , para lo cual necesitaba agregar Configuration.EnvironmentVariables. Mi código es el siguiente:

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

Curiosamente, la única declaración de using que necesitaba era using Microsoft.Extensions.Configuration .


Use ''Microsoft.Extensions.Configuration'' y ''Microsoft.Extensions.Configuration.Json'' para resolver el problema.

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

Aquí está la muestra ''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 } }