it-swarm.com.de

Festlegen von BasePath in ConfigurationBuilder in Core 2.0

Wie kann ich den Basispfad in ConfigurationBuilder in Core 2.0 festlegen?.

Ich habe gegoogelt und this question, this von Microsoft-Dokumenten und 2. docs online gefunden, aber sie scheinen eine Version von Microsoft.Extension.Configuration Von 1.0.0-beta8 .

Ich möchte appsettings.json Lesen. Gibt es eine neue Möglichkeit, dies in Core 2.0 zu tun?

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: Zusätzlich zum Hinzufügen von Microsoft.Extensions.Configuration.FileExtensions , wie unten durch Set angegeben Ich musste auch Microsoft.Extensions.Configuration.Json hinzufügen, um die AddJsonFile -Erweiterung zu erhalten.

101
Padhraic

Die Erweiterungsmethode SetBasePath ist in Config.FileExtensions definiert.

Sie müssen einen Verweis auf das Paket Microsoft.Extensions.Configuration.FileExtensions hinzufügen.

Um AddJsonFile aufzulösen, fügen Sie einen Verweis auf Microsoft.Extensions.Configuration.Json Paket.

192
Set

Ich entwickle eine .NET Core 2-Konsolenanwendung mit Visual Studio 2017 v15.5. Wie andere angemerkt haben, musste ich nach dem Hinzufügen von Microsoft.Extensions.Configuration Microsoft.Extensions.Configuration.Json hinzufügen, damit der Aufruf AddJsonFile() funktioniert. Dies hat auch den Aufruf SetBasePath() zum Laufen gebracht; also brauchte ich nicht um Configuration.FileExtensions hinzuzufügen. (Mein Code wird sowohl mit als auch ohne kompiliert und ausgeführt.)

Ich hatte auch einen Aufruf von AddEnvironmentVariables(), für den ich Configuration.EnvironmentVariables hinzufügen musste. Mein Code lautet wie folgt:

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

Interessanterweise war die einzige using Anweisung, die ich brauchte, using Microsoft.Extensions.Configuration.

47
Ed Graham

Verwenden Sie sowohl "Microsoft.Extensions.Configuration" als auch "Microsoft.Extensions.Configuration.Json", um das Problem zu beheben.

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

Hier ist das Beispiel '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
} }
8