कैसे CoreBasePath विन्यास 2.0 में CoreBasePath करने के लिए


142

मैं कोर 2.0 में कॉन्फ़िगरेशनबीयल में आधार पथ कैसे सेट कर सकता हूं।

मैं googled और पाया है इस सवाल है, यह माइक्रोसॉफ्ट डॉक्स से, और 2.0 ऑनलाइन डॉक्स पर वे का एक संस्करण का उपयोग कर रहे Microsoft.Extension.Configurationसे 1.0.0-beta8

मैं पढ़ना चाहता हूं appsettings.json। क्या कोर 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: Microsoft.Extensions.Configuration.FileExtensions को सेट के साथ जोड़ने के अलावा सेट I द्वारा भी Microsoft को जोड़ना आवश्यक है AddJsonFile। एक्सटेंशन प्राप्त करने के लिए Microsoft.Extensions.Configuration.Json को जोड़ने की आवश्यकता है ।


2
अद्यतन काम किया!
क्रिस रोज़े

2
Microsoft.Extensions.Configuration.Jsonपर निर्भरता है Microsoft.Extensions.Configuration.FileExtensions, इसलिए आपको सिर्फ पूर्व की आवश्यकता है।
जोहान बी

दोस्तों, कृपया ध्यान दें, AddJsonFile("appsettings.json")विधि अपने होस्टिंग वातावरण के बारे में पता नहीं है! .AddJsonFile($"appsettings.{_hostingEnvironment.EnvironmentName}.json")इसके बजाय उपयोग करें । : डी
जेस

जवाबों:


302

SetBasePathविस्तार विधि में परिभाषित किया गया है Config.FileExtensions

आपको Microsoft.Extensions.Configuration.FileExtensions पैकेज का संदर्भ जोड़ना होगा ।

हल करने के लिए AddJsonFile, Microsoft.Extensions.Configuration.Jsonपैकेज में एक संदर्भ जोड़ें ।


36
लेकिन अब "AddJsonFile" विधि नहीं मिली है। : DI को यह पैकेज भी जोड़ना था: "Microsoft.Extensions.Configuration.Json"।
तडेज

5
Microsoft.Extensions.Configuration.Jsonपर निर्भरता है Microsoft.Extensions.Configuration.FileExtensions, इसलिए आपको सिर्फ पूर्व की आवश्यकता है।
जोहान बी

61

मैं Visual Studio 2017 v15.5 का उपयोग करके .NET कोर 2 कंसोल ऐप विकसित कर रहा हूं। जैसा कि अन्य लोगों ने नोट किया है, Microsoft.Extensions.Configuration को जोड़ने के बाद मुझे Microsoft को जोड़ने की आवश्यकता है AddJsonFile()। काम करने के लिए कॉल प्राप्त करने के लिए Microsoft.Extensions.Configuration.Json को जोड़ने की आवश्यकता है । इसने SetBasePath()कॉल का काम भी किया ; इसलिए मुझे कॉन्फ़िगरेशन जोड़ने की आवश्यकता नहीं थी । (मेरा कोड संकलित करता है और इसके साथ और इसके बिना दोनों चलाता है।)

मेरे पास एक कॉल भी थी AddEnvironmentVariables(), जिसके लिए मुझे कॉन्फ़िगरेशन जोड़ने की आवश्यकता थी। मेरा कोड इस प्रकार है:

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

दिलचस्प बात यह है कि usingमुझे केवल एक बयान की आवश्यकता थी using Microsoft.Extensions.Configuration


11
केवल क्लास फाइल में आवश्यक स्टेटमेंट का उपयोग Microsoft.Extensions.Configuration होना चाहिए। हालाँकि, प्रोजेक्ट में आपको स्पष्ट रूप से NuGet संकुल प्रोजेक्ट विकल्प के माध्यम से NuGet निर्भरता "Microsoft.Extensions.Configuration.Json" जोड़ना होगा। इसकी एक निर्भरता "Microsoft.Extensions.Configuration.FileExtensions" है और इसलिए इसे निर्भरता वायर-अप के भाग के रूप में शामिल किया जाएगा। ये दो निर्भरताएँ "SetBasePath" और "AddJsonFile" संकलन त्रुटियों दोनों को हल करेगी।
ग्रोग्सोनियन

यह इंगित करने योग्य है कि यह अब मैक प्रीव्यू 8 के लिए वीएस के रूप में काम नहीं करता है, वर्तमान निर्देशिका को बिन / netcoreapp2x पर सेट करता है
क्रिस बेके

पांडित्य नहीं बल्कि Configuration.EnvironmentVariables== Microsoft.Extensions.Configuration.EnvironmentVariables। इसी तरह के नामों के साथ कई चीजें हैं।
ली रिचर्डसन

12

'Microsoft.Extensions.Configuration' और 'Microsoft.Extensions.Configuration.Json' दोनों का उपयोग करें इससे समस्या का समाधान होगा।

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

यहाँ नमूना '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
} }
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.