কোর 2.0 এ কনফিগারেশনবিল্ডারে কীভাবে সেটবেসপথ করবেন


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"
  }
}

আপডেট: যোগ করা ছাড়াও Microsoft.Extensions.Configuration.FileExtensions নীচে দ্বারা নির্দেশিত সেট আমিও যোগ করার জন্য প্রয়োজন Microsoft.Extensions.Configuration.Json পেতে AddJsonFileএক্সটেনশান।


2
ইউপিডিয়া কাজটি করেছে!
ক্রিস রোস্টে 22'19

2
Microsoft.Extensions.Configuration.Jsonএর উপর নির্ভরতা রয়েছে Microsoft.Extensions.Configuration.FileExtensions, সুতরাং আপনার কেবল পূর্বের প্রয়োজন।
জোহান বি

বন্ধুরা, দয়া করে নোট করুন, AddJsonFile("appsettings.json")পদ্ধতিটি আপনার হোস্টিংয়ের পরিবেশ সম্পর্কে সচেতন নয়! .AddJsonFile($"appsettings.{_hostingEnvironment.EnvironmentName}.json")পরিবর্তে ব্যবহার করুন। : ডি
জেস

উত্তর:


302

SetBasePathএক্সটেনশন পদ্ধতি সংজ্ঞায়িত করা হয় Config.FileExtensions

আপনাকে মাইক্রোসফ্ট- এক্সটেনশনস.কনফিগারেশন.ফাইএল এক্সটেনশন প্যাকেজটিতে একটি রেফারেন্স যুক্ত করতে হবে ।

সমাধানের AddJsonFileজন্য, Microsoft.Extensions.Configuration.Jsonপ্যাকেজটিতে একটি রেফারেন্স যুক্ত করুন ।


36
তবে এখন "অ্যাডজসনফায়াল" পদ্ধতিটি খুঁজে পাওয়া যায় না। : ডিআই-কে এই প্যাকেজটি যুক্ত করতে হয়েছিল: "মাইক্রোসফ্ট। এক্সটেনশনস.কনফিগারেশন.জসন"।
তাদেজ

5
Microsoft.Extensions.Configuration.Jsonএর উপর নির্ভরতা রয়েছে Microsoft.Extensions.Configuration.FileExtensions, সুতরাং আপনার কেবল পূর্বের প্রয়োজন।
জোহান বি

61

আমি ভিজ্যুয়াল স্টুডিও 2017 ভি 15.5 ব্যবহার করে একটি নেট নেট 2 কনসোল অ্যাপ্লিকেশন বিকাশ করছি। অন্যরা যেমন উল্লেখ করেছে, মাইক্রোসফ্ট যুক্ত করার পরে.এক্সটেনশনগুলি C কনফিগারেশনটি AddJsonFile()কলটি কাজ করার জন্য আমাকে মাইক্রোসফ্ট.এক্সটেনশনস.কনফিগারেশন.জসন যুক্ত করা দরকার । এটি SetBasePath()কলটির কাজও করেছে; সুতরাং আমার কনফিগারেশন যোগ করার দরকার নেই ile ফাইল এক্সটেনশনস । (আমার কোডটি এটি সংযোজন করে এবং এটি ছাড়াও উভয়ই চালিত হয়))

আমার কাছে একটি কলও ছিল AddEnvironmentVariables(), যার জন্য আমাকে কনফিগারেশন যোগ করতে হবে Eপরিবেশের পরিবর্তনশীল। আমার কোডটি নিম্নরূপ:

  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
ক্লাস ফাইলে প্রয়োজনীয় একমাত্র ব্যবহারের বিবৃতিটি মাইক্রোসফ্ট হওয়া উচিত। এক্সটেনশনগুলি C কনফিগারেশন। তবে, প্রকল্পটিতে আপনাকে স্পষ্টভাবে নিউগেট প্যাকেজ পরিচালনা প্রকল্প বিকল্পের মাধ্যমে নুগেট নির্ভরতা "মাইক্রোসফ্ট। এক্সটেনশনস.কনফিগারেশন.জসন" যুক্ত করতে হবে। এর একটি নির্ভরতা হ'ল "মাইক্রোসফ্ট। এক্সটেনশনগুলি C কনফিগারেশন ile ফাইল এক্সটেনশনস" এবং তাই নির্ভরতা ওয়্যার-আপের অংশ হিসাবে অন্তর্ভুক্ত করা হবে। এই দুটি নির্ভরতা "সেটবেসপথ" এবং "অ্যাডজসনফাইলে" সংকলন ত্রুটি উভয়ই সমাধান করবে।
গ্রেগসনিয়ান

এটি উল্লেখ করার মতো যে এটি আর ম্যাক প্রিভিউ 8 এর জন্য ভিএস হিসাবে কাজ করে না বর্তমান বাইন / নেটকোয়ারপ্প 2x-এ নির্ধারণ করে
ক্রিস বেক

পেডেন্টিক হতে হবে না তবে Configuration.EnvironmentVariables== Microsoft.Extensions.Configuration.EnvironmentVariables। একই নামের সাথে বেশ কয়েকটি জিনিস রয়েছে।
লি রিচার্ডসন

12

'মাইক্রোসফ্ট. এক্সটেনশনস.কনফিগারেশন' এবং 'মাইক্রোসফ্ট। এক্সটেনশনস.কনফিগারেশন.জসন' উভয়ই এই সমস্যার সমাধান করবে।

https://www.nuget.org/packages/Mic Microsoft.Extensions.Configration/ https://www.nuget.org/packages/Mic Microsoft.Extensions.Configration.Json/

এখানে 'সংযোগ কারখানা' নমুনা দেওয়া হচ্ছে

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
} }
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.