2017-10-20 49 views
12

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

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

मैं 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" 
    } 
} 

अद्यतन: साथ ही Miscrosoft.Extension.Configuration.FileExtenson के रूप में जोड़ने Set मैं भी जरूरत से संकेत दिया Microsoft.Extensions.Configuration.Json जोड़ने के लिए AddJsonFile विस्तार मिलता है।

उत्तर

26

SetBasePath एक्सटेंशन विधि Config.FileExtensions में परिभाषित की गई है।

आपको Microsoft.Extensions.Configuration.FileExtensions पैकेज पर निर्भरता जोड़ने की आवश्यकता है।

+8

लेकिन अब "AddJsonFile" विधि नहीं मिला है। : डी मुझे यह पैकेज भी जोड़ना था: "माइक्रोसॉफ्ट। एक्सटेंशन। कॉन्फ़िगरेशन। जेसन"। – JedatKinports

5

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

मुझे 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 था: मेरे कोड इस प्रकार है।

1

दोनों 'माइक्रोसॉफ्ट। एक्सटेंशन। कॉन्फ़िगरेशन' और 'माइक्रोसॉफ्ट। एक्सटेंशन। कॉन्फ़िगरेशन। जेसन' दोनों का उपयोग करें, इससे समस्या हल हो जाएगी।

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 
} } 
संबंधित मुद्दे