203 votes

Comment définir le chemin d'accès à la base dans ConfigurationBuilder dans Core 2.0 ?

Comment puis-je définir le chemin de base dans ConfigurationBuilder dans Core 2.0.

J'ai cherché sur Google et j'ai trouvé cette question, cette de la documentation de Microsoft, et le 2.0 en ligne, mais il semble qu'ils utilisent une version de Microsoft.Extension.Configuration de 1.0.0-beta8 .

Je veux lire appsettings.json . Existe-t-il une nouvelle façon de procéder 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 de l'ajout de Microsoft.Extensions.Configuration.FileExtensions comme indiqué ci-dessous par Set (jeu de mots) J'ai également dû ajouter Microsoft.Extensions.Configuration.Json pour obtenir le AddJsonFile extension.

3 votes

L'UPDATE a fait le travail !

6 votes

Microsoft.Extensions.Configuration.Json a une dépendance à l'égard de Microsoft.Extensions.Configuration.FileExtensions Vous n'avez donc besoin que du premier.

0 votes

Chers amis, veuillez noter que le AddJsonFile("appsettings.json") n'est pas au courant de votre environnement d'hébergement ! Utiliser .AddJsonFile($"appsettings.{_hostingEnvironment.EnvironmentN‌​ame}.json") à la place. :D

441voto

Set Points 21500

Les SetBasePath est définie dans le document Config.FileExtensions .

Vous devez ajouter une référence au Microsoft.Extensions.Configuration.FileExtensions l'emballage.

Pour résoudre AddJsonFile ajouter une référence au Microsoft.Extensions.Configuration.Json l'emballage.

46 votes

Mais maintenant la méthode "AddJsonFile" n'est pas trouvée :D J'ai dû ajouter ce package également : "Microsoft.Extensions.Configuration.Json".

9 votes

Microsoft.Extensions.Configuration.Json a une dépendance à l'égard de Microsoft.Extensions.Configuration.FileExtensions Vous n'avez donc besoin que du premier.

1 votes

Gérer les paquets nuget au niveau de la solution et non au niveau du projet

78voto

Ed Graham Points 1281

Je développe une application console .NET Core 2 à l'aide de Visual Studio 2017 v15.5. Comme d'autres l'ont noté, après avoir ajouté Microsoft.Extensions.Configuration, j'ai eu besoin d'ajouter Microsoft.Extensions.Configuration.Json pour obtenir le fichier de configuration. AddJsonFile() l'appel au travail. Cela a également permis à l SetBasePath() travail ; c'est pourquoi j'ai n'a pas eu besoin pour ajouter Configuration.FileExtensions . (Mon code se compile et s'exécute aussi bien avec que sans).

J'ai également reçu un appel à AddEnvironmentVariables() pour lequel j'ai dû 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();

Il est intéressant de noter que la seule using La déclaration dont j'avais besoin était using Microsoft.Extensions.Configuration .

11 votes

La seule déclaration d'utilisation nécessaire dans le fichier de classe devrait être Microsoft.Extensions.Configuration. Cependant, vous devez ajouter explicitement au projet la dépendance NuGet "Microsoft.Extensions.Configuration.Json" via l'option de projet Manage NuGet Packages. Cette dépendance est "Microsoft.Extensions.Configuration.FileExtensions" et sera donc incluse dans le réseau de dépendances. Ces deux dépendances résoudront les erreurs de compilation "SetBasePath" et "AddJsonFile".

0 votes

Il est utile de préciser que cela ne fonctionne plus car VS for Mac Preview 8 fixe le répertoire courant à bin/netcoreapp2x.

0 votes

Sans vouloir être pédant, je dirais que Configuration.EnvironmentVariables == Microsoft.Extensions.Configuration.EnvironmentVariables . Il existe plusieurs choses avec des noms similaires.

15voto

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 de '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
} }

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X