অ্যাপটিটিংস.জসনকে স্বয়ংক্রিয়ভাবে অ্যাপ্লিকেশনগুলির জন্য সেট করুন এবং এসপ নেট কোরটিতে পরিবেশ মুক্ত করতে চান?


98

appsettings.jsonডেটাবেস সংযোগের স্ট্রিং, ওয়েবপিআই লোকেশন এবং ডেভেলপমেন্ট, স্টেজিং এবং লাইভ পরিবেশের জন্য পৃথক পৃথক জিনিসের জন্য আমি কিছু মান নির্ধারণ করেছি ।

একাধিক appsettings.jsonফাইল (যেমন appsettings.live.json, ইত্যাদি ইত্যাদি) রাখার কোনও উপায় আছে এবং কীভাবে তৈরি হওয়া কনফিগারেশনের উপর ভিত্তি করে কোনটি ব্যবহার করতে হবে এ্যাসপ নেট অ্যাপটি কেবল 'জানুন'?

উত্তর:


32

আপনি শর্তসাপেক্ষ সংকলন ব্যবহার করতে পারেন:

public Startup(IHostingEnvironment env)
{
    var builder = new ConfigurationBuilder()
    .SetBasePath(env.ContentRootPath)
    .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
#if SOME_BUILD_FLAG_A
    .AddJsonFile($"appsettings.flag_a.json", optional: true)
#else
    .AddJsonFile($"appsettings.no_flag_a.json", optional: true)
#endif
    .AddEnvironmentVariables();
    this.configuration = builder.Build();
}

26
আপনার এমএসবাইল / টিএফএস বিল্ডে আপনার পরিবেশের পরিবর্তনশীল সেট করা উচিত। শর্তসাপেক্ষ সংকলন সিআই বিল্ডগুলিতে সহজেই পরিচালিত কোনও কিছুর জন্য ভুলের দিকে পরিচালিত করে। যেমন, .এডডজসনফাইলে (app "অ্যাপসেটিংস {{env.EnomotName} .json", alচ্ছিক: সত্য)
নিক টার্নার

4
পরিবেশ পরিবর্তনশীলটির জন্য আমার উত্তর ( স্ট্যাকওভারফ্লো.com / a / 50331886 / 1319086 ) দেখুন
জোনাটান ড্রাগন

9
এই ধরণের পদ্ধতির কোডটি প্রতিটি পরিবেশের জন্য বিশেষভাবে পুনরায় সংবিধানে বাধ্য করে, অন্যত্র পুনরায় বিতরণ / ইনস্টল করা অসম্ভব করে তোলে।
টিভিডিয়াস

4
প্রশ্নটি ছিল "বিল্ড কনফিগারেশন সম্পর্কে জানার বিষয়ে"
দিমিত্রি

4
এটি গ্রহণযোগ্য উত্তর হিসাবে চিহ্নিত করা উচিত নয় - যদিও এটি একটি সমাধান তবে এটি সর্বোত্তম অনুশীলন নয়।
চার্লিহ

96

আমি একটি কাজের পরিবেশের স্ক্রিনশট যুক্ত করেছি, কারণ এতে আমার কয়েক ঘন্টা ধরে গবেষণা ও উন্নয়ন খরচ করে।

  1. প্রথমে আপনার launch.jsonফাইলটিতে একটি কী যুক্ত করুন।

    নীচের স্ক্রিনশটটি দেখুন, আমি Developmentআমার পরিবেশ হিসাবে যুক্ত করেছি।

    প্রবর্তন.জসনে পরিবেশের পরিবর্তনশীল ঘোষণা

  2. তারপরে, আপনার প্রকল্পে, একটি নতুন appsettings.{environment}.jsonফাইল তৈরি করুন যাতে পরিবেশের নাম অন্তর্ভুক্ত রয়েছে।

    নিম্নলিখিত স্ক্রিনশটে, নামের দুটি পৃথক ফাইল সন্ধান করুন:

    • appsettings.Development.Json
    • appSetting.json


    অ্যাপসেটেশনগুলি JSON ফাইলগুলির প্রকল্পের দৃশ্য

  3. এবং অবশেষে, এটি আপনার StartUpক্লাসে এটির মতো কনফিগার করুন :

    public Startup(IHostingEnvironment env)
    {
        var builder = new ConfigurationBuilder()
            .SetBasePath(env.ContentRootPath)
            .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
            .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
            .AddEnvironmentVariables();
    
        Configuration = builder.Build();
    }
    
  4. এবং শেষ অবধি, আপনি এটি কমান্ড লাইন থেকে এটি চালাতে পারেন:

    dotnet run --environment "Development"
    

    "Development"আমার পরিবেশের নাম কোথায় ।


4
এটি চেষ্টা করেছেন এবং এটি দুর্দান্ত কাজ করে। ভিএস2017 এমনকি বেস ফাইলের মতো বিভিন্ন সংস্করণ প্রদর্শন করে। ভোট আপ
রবার্তো

4
ihostingen পরিবেশ যেমন অবনমিত হয় আপনি কীভাবে এটি মূল 2.2 তে করবেন
djack109

4
@ djack109 এর IWebHostEnvironmentপরিবর্তে আপনার ব্যবহার করা উচিত ।
alessandrocb

53

.NET কোর 3.0+ এর জন্য আপডেট

  1. আপনি CreateDefaultBuilderযা ব্যবহার করতে পারেন যা স্বয়ংক্রিয়ভাবে আপনার স্টার্টআপ ক্লাসে একটি কনফিগারেশন অবজেক্ট তৈরি করে এবং পাস করবে:

    WebHost.CreateDefaultBuilder(args).UseStartup<Startup>();
    
    public class Startup
    {
        public Startup(IConfiguration configuration) // automatically injected
        {
            Configuration = configuration;
        }
        public IConfiguration Configuration { get; }
        /* ... */
    }
    
  2. CreateDefaultBuilderস্বয়ংক্রিয়ভাবে উপযুক্ত ফাইল অন্তর্ভুক্ত তাই প্রতিটি পরিবেশের জন্য একটি পৃথক অ্যাপসেটিং ফাইল যুক্ত করুন:appsettings.Environment.json

    appsettings.env.json

  3. তারপরে / ডিবাগিং চলাকালীন ASPNETCORE_ENVIRONMENT পরিবেশ পরিবর্তনশীল সেট করুন

পরিবেশ পরিবর্তনশীল কীভাবে সেট করবেন

আপনার আইডিই এর উপর নির্ভর করে, দুটি জায়গা রয়েছে ডটনেট প্রকল্পগুলি variতিহ্যগতভাবে পরিবেশের ভেরিয়েবলগুলির সন্ধান করে:

  • জন্য ভিসুয়াল স্টুডিও প্রকল্প> প্রোপার্টি> ডিবাগ> পরিবেশ ভেরিয়েবল এখানে যান:

    ভিজ্যুয়াল স্টুডিও - পরিবেশের পরিবর্তনশীল

  • জন্য ভিসুয়াল স্টুডিও কোড , সম্পাদনা .vscode/launch.json> env:

    ভিজ্যুয়াল স্টুডিও কোড> পরিবেশ চালু করুন

  • লঞ্চ সেটিংস ব্যবহার করে , সম্পাদনা Properties/launchSettings.jsonকরুন environmentVariables:

    সেটিংস চালু করুন

    যা ভিজ্যুয়াল স্টুডিওর টুলবার থেকেও নির্বাচন করা যায়

    সেটিংস ড্রপডাউন চালু করুন

  • ব্যবহার dotnet CLI , জন্য উপযুক্ত সিনট্যাক্স ব্যবহার আপনার OS প্রতি এনভায়রনমেন্ট ভেরিয়েবলের মান স্থাপনার

    দ্রষ্টব্য : যখন কোনও অ্যাপ ডটনেট রান দিয়ে লঞ্চ করা হয় , launchSettings.jsonউপলভ্য হলে তা পড়তে হয় environmentVariablesএবং প্রবর্তনস্থলগুলিতে সেটিংস.জসন পরিবেশের ভেরিয়েবলগুলিকে ওভাররাইড করে।

কিভাবে Host.CreateDefaultBuilderকাজ করে?

.NET কোর 3.0 Host.CreateDefaultBuilderপ্ল্যাটফর্ম এক্সটেনশনের অধীনে যুক্ত করা হয়েছে IConfigurationযা নিম্নলিখিত ক্রমে অ্যাপটির জন্য ডিফল্ট কনফিগারেশন সরবরাহ করে এমন একটি ডিফল্ট সূচনা সরবরাহ করবে :

  1. appsettings.jsonJSON কনফিগারেশন সরবরাহকারী ব্যবহার করে ।
  2. appsettings.Environment.jsonJSON কনফিগারেশন সরবরাহকারী ব্যবহার করে । উদাহরণ স্বরূপ:
    • appsettings.Production.json বা
    • appsettings.Development.json
  3. অ্যাপ্লিকেশনটি যখন বিকাশের পরিবেশে চালিত হয় তখন অ্যাপস সিক্রেটস
  4. এনভায়রনমেন্ট ভেরিয়েবল কনফিগারেশন সরবরাহকারী ব্যবহার করে পরিবেশের ভেরিয়েবল
  5. কমান্ড-লাইন কনফিগারেশন সরবরাহকারী ব্যবহার করে কমান্ড-লাইন আর্গুমেন্ট ।

আরও পঠন - এমএস ডক্স


ধন্যবাদ, এটি ভাল তবে কনসোল প্রক্রিয়া (বা কর্মী প্রক্রিয়া টেমপ্লেট / ভাস্কর্য) দিয়ে এটি কীভাবে করবেন?
এইচবি0

44

এএসপি.নেট কোরে আপনার যথাযথ অ্যাপসেটেটিংস.জসনের জন্য কনফিগারেশন তৈরির পরিবর্তে পরিবেশ পরিবর্তনগুলি ব্যবহার করা উচিত

  1. আপনার প্রকল্প> বৈশিষ্ট্য> ডিবাগ> পরিবেশ পরিবর্তনীয় উপর ডান ক্লিক করুন

    পরিবেশের পরিবর্তনশীল

  2. এএসপি.নেট কোর উপযুক্ত অ্যাপসেটেটিংস.জসন ফাইলটি ব্যবহার করবে:

    সমাধান এক্সপ্লোরারে অ্যাপসেটিং ফাইলগুলির উদাহরণ

  3. এখন আপনি এই পরিবেশের পরিবর্তনশীলটি ব্যবহার করতে পারেন:

    public Startup(IHostingEnvironment env)
    {
        var builder = new ConfigurationBuilder()
            .SetBasePath(env.ContentRootPath)
            .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
            .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
            .AddEnvironmentVariables();
    
        Configuration = builder.Build();
    }
    

দ্রষ্টব্য : আপনি যদি @ দিমিত্রি এর উত্তর ব্যবহার করেন তবে আপনি যেমন সমস্যাগুলিতে দৌড়াতে পারেন। যখন অ্যাজুরিতে appsettings.json মানগুলি ওভাররাইড করছে।


35

আপনি আপনার পরিবেশকের মধ্যে পরিবেশের ভেরিয়েবল এবং ConfigurationBuilderক্লাসটি এর Startupমতো ব্যবহার করতে পারেন :

public Startup(IHostingEnvironment env)
{
    var builder = new ConfigurationBuilder()
    .SetBasePath(env.ContentRootPath)
    .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
    .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
    .AddEnvironmentVariables();
    this.configuration = builder.Build();
}

তারপরে আপনার appsettings.xxx.jsonপ্রয়োজনীয় প্রতিটি পরিবেশের জন্য একটি ফাইল তৈরি করুন, "xxx" পরিবেশের নাম হিসাবে। নোট করুন যে আপনি সমস্ত "গ্লোবাল কনফিগারেশন মানগুলিকে আপনার" সাধারণ " appsettings.jsonফাইলে রাখতে পারেন এবং পরিবেশের জন্য নির্দিষ্ট স্টাফগুলি এই নতুন ফাইলে রাখতে পারেন।

এখন আপনার কেবল ASPNETCORE_ENVIRONMENTকিছু নির্দিষ্ট পরিবেশ মান ("লাইভ", "স্টেজিং", "উত্পাদন", যাই হোক না কেন) নামে ডাকা একটি পরিবেশ পরিবর্তনশীল দরকার । আপনার বিকাশের পরিবেশের জন্য আপনি আপনার প্রকল্পের সেটিংসে এই পরিবর্তনশীলটি নির্দিষ্ট করতে পারেন এবং অবশ্যই আপনাকে এটি আপনার স্টেজিং এবং উত্পাদন পরিবেশেও সেট করতে হবে। আপনি কীভাবে সেখানে এটি করছেন তা নির্ভর করে এটি কী ধরণের পরিবেশ।

আপডেট: আমি ঠিক বুঝতে পেরেছি যে আপনি appsettings.xxx.jsonআপনার বর্তমান বিল্ড কনফিগারেশনের উপর ভিত্তি করে চয়ন করতে চান । এটি আমার প্রস্তাবিত সমাধান দিয়ে অর্জন করা যায় না এবং এটি করার কোনও উপায় আছে কিনা তা আমি জানি না। "পরিবেশের পরিবর্তনশীল" উপায়টি তবে কাজ করে এবং আপনার পদ্ধতির জন্য একটি ভাল বিকল্পও হতে পারে।


আমি প্রজেক্টের বৈশিষ্ট্যগুলিতে-> ডিবাগ বিভাগে পরিবেশের ভেরিয়েবলগুলি ব্যবহার করে দেখেছিলাম, তবে কীভাবে প্রজেক্ট সেটিংসের ভিত্তিতে এটি পরিবর্তিত হবে তার কোনও সুস্পষ্ট উপায় নেই। এটি কি আমার প্রকল্পটিকে পরিচালনা করার জন্য আমি যুক্ত করতে পারি এমন একটি ফাইল?
টুইটটিপি

প্রকল্পের বৈশিষ্ট্যগুলির মধ্যে ভেরিয়েবল সেট করা কেবল এটি আপনার বিকাশের পরিবেশে ব্যবহার করার জন্য কাজ করবে (সম্ভবত ভিজ্যুয়াল স্টুডিও)। নির্দিষ্ট পরিবেশের (আইআইএস, আউজুর) উপর নির্ভর করে আপনার মোতায়েন করা অ্যাপ্লিকেশনগুলির জন্য আপনাকে অন্য কোথাও এটি সেট করতে হবে। আমি কিছু কনফিগারেশন ফাইলে ভেরিয়েবলটি সেট করার পরামর্শ দিচ্ছি না কারণ এই ফাইলটিও ডিফল্ট হয়ে যেতে পারে এবং তারপরে সার্ভারের মানগুলিকে ওভাররাইড করে।
ওঙ্কেল টুব

আপনি এটি বিল্ড কনফিগারেশনগুলিতে সেট আপ করেছেন। যদি কোনও বিল্ড কনফিগারেশন ফাইল না থাকে তবে তারা এটি ম্যানুয়ালি করছে, সুতরাং তাদের এটি (প্রত্নতাত্ত্বিক) ডিগ্রি প্রোফাইলে সেট করতে হবে
নিক টার্নার

আমার কাছে অ্যাজুরে টেস্ট, স্টেজিং এবং প্রোডাকশন এর মতো একাধিক পরিবেশ রয়েছে। আমি যদি ভিএস থেকে অ্যাজুরেতে ওয়েব অ্যাপের প্রকাশনা বিল্ড প্রকাশ করতে চাই তবে আমি কোথায় এএসপিএনটেক্রেইইইএন_ওয়্যারওয়ানমেন্ট ভেরিয়েবল পরিবর্তন করব?
ফ্রস্টি

মোতায়েনের সময় আমরা ভেরিয়েবলগুলি পরিবর্তন করি না, পরিবর্তে সেগুলি নির্দিষ্ট পরিবেশে অন্তর্নির্মিত হয়। অ্যাজুরে, আপনি এই অ্যাপ্লিকেশন পরিষেবা কনফিগারেশনের মধ্যে "অ্যাপ্লিকেশন সেটিংস" বাছাই না করে সরাসরি এই মানগুলি সেট করতে পারেন। আপনি একাধিক স্লট নিয়ে কাজ করার ক্ষেত্রে এটিকে "স্থাপনার স্লট সেটিংস" হিসাবে চিহ্নিত করতে ভুলবেন না।
ওঙ্কেল টুব

29

.NET কোর 2.0 ব্যবহারকারীদের জন্য কেবল একটি আপডেট, আপনি কল করার পরে অ্যাপ্লিকেশন কনফিগারেশন নির্দিষ্ট করতে পারেন CreateDefaultBuilder:

public class Program
{
   public static void Main(string[] args)
   {
      BuildWebHost(args).Run();
   }

   public static IWebHost BuildWebHost(string[] args) =>
      WebHost.CreateDefaultBuilder(args)
             .ConfigureAppConfiguration(ConfigConfiguration)
             .UseStartup<Startup>()
             .Build();

   static void ConfigConfiguration(WebHostBuilderContext ctx, IConfigurationBuilder config)
   {
            config.SetBasePath(Directory.GetCurrentDirectory())
                .AddJsonFile("config.json", optional: false, reloadOnChange: true)
                .AddJsonFile($"config.{ctx.HostingEnvironment.EnvironmentName}.json", optional: true, reloadOnChange: true);

   }
 }

4
আপনি কীভাবে পরিবেশ ব্যবহার করছেন তার মধ্যে স্যুইচ করবেন? কোনও কনফিগার ফাইলে কি কিছু পরিবর্তন করার কথা রয়েছে? আমি বুঝতে পেরেছি যে প্রকল্পটি অ্যাজেচারে অ্যাপসেটেটিংজেজেসনে চলে যখন আমি যে ইউআরএলটি ব্যবহার করতে চাই সেগুলি যুক্ত করতে হবে এবং স্থানীয়ভাবে (এফ 5 দ্বারা) অ্যাপসেটেটিংয়ে চালানোর সময় যে ইউআরএলটি সম্পাদন করতে চাই সেগুলি যোগ করতে হবে । এটা কি ঠিক? আমার স্ট্রিংটি যেটি আমি ব্যবহার করতে চাই তা ফাইল লঞ্চসেটেটিংস.জেগসনে রয়েছে এবং অ্যাপ্লিকেশনটি কোথায় কার্যকর করা হয়েছে তার ভিত্তিতে কীভাবে এটি পরিবর্তন করতে হয় সে সম্পর্কে আমি কিছুটা অস্পষ্ট (বা এটি যদি একেবারেই পরিবর্তিত হওয়ার কথা)।
গাধাবানানা

4
@ ডনকিবানানা পরিবেশগত বৈশিষ্ট্যগুলি প্রকল্পের বৈশিষ্ট্যগুলিতে নির্দিষ্ট একটি সেটিংস ছাড়া আর কিছুই নয়। ভিএস 2017 এ, প্রকল্প> বৈশিষ্ট্যগুলিতে ডান ক্লিক করুন। ডিবাগের অধীনে, আপনি কীটির বর্তমান পরিবেশ দেখতে পাবেন ASPNETCORE_ENVIRONMENT। মানটি এটির জন্য প্রতিস্থাপন করা হবে ctx.HostingEnvironment.EnvironmentName}। সুতরাং আপনি যদি সেই মানটি 'প্রোডাকশনে' সেট করে থাকেন তবে প্রকল্পটি config.Production.jsonরুট ফোল্ডারে ফাইলটি সন্ধান করবে । আরও তথ্যের জন্য, দয়া করে এই লিঙ্কটি দেখুন
umutesen

Error CS0266 Cannot implicitly convert type 'Microsoft.AspNetCore.Hosting.IWebHost' to 'Microsoft.AspNetCore.Hosting.IWebHostBuilder'. An explicit conversion exists (are you missing a cast?) ওয়েবহোস্টে একটি তৈরি করে । ক্রিয়েট ডেফল্টবিলার (...
হেকাটনচায়ার্স

এখানে লক্ষণীয় যে এখানে "অ্যাডজেসনফিলকে স্বয়ংক্রিয়ভাবে দু'বার ডাকা হবে যখন আপনি ক্রিয়েটডিফল্টবিল্ডার দিয়ে একটি নতুন হোস্ট নির্মাতা"। অন্য কথায়, এটি আগে থেকেই appSettings.json এবং তারপর আপনার পরিবেশ কনফিগারেশনের উপর ভিত্তি করে লোড হচ্ছে, এটি লোড appsettings হয় {পরিবেশ} .json।
ডেভিড ইয়েটস

13
  1. একাধিক ফাইল তৈরি করুন :appSettings.$(Configuration).json

    • appSettings.staging.json
    • appSettings.production.json
  2. প্রকল্পটিতে একটি প্রাক-বিল্ড ইভেন্ট তৈরি করুন যা এতে संबंधित ফাইলটি অনুলিপি করে appSettings.json:

    copy appSettings.$(Configuration).json appSettings.json
    
  3. কেবলমাত্র appSettings.jsonআপনার কনফিগার বিল্ডারে ব্যবহার করুন :

    var builder = new ConfigurationBuilder()
                .SetBasePath(env.ContentRootPath)
                .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
                .AddEnvironmentVariables();
    
    Configuration = builder.Build();
    

এটি একটি স্বীকৃত উত্তর হওয়া উচিত। জটিল ক্ষেত্রে স্লোচিথ ব্যবহার করা যেতে পারে।
আন্তন ক্রোগলভ

8

আপনি যত কনফিগারেশন নাম যোগ করতে পারেন ASPNETCORE_ENVIRONMENTমধ্যে launchSettings.jsonনীচে

  "iisSettings": {
    "windowsAuthentication": false,
    "anonymousAuthentication": true,
    "iisExpress": {
      "applicationUrl": "http://localhost:58446/",
      "sslPort": 0
    }
  },
  "profiles": {
    "IIS Express": {
      "commandName": "IISExpress",
      "environmentVariables": {
        ASPNETCORE_ENVIRONMENT": "$(Configuration)"
      }
    }
  }

2

ওয়েব সংস্করণ ছাড়াই কনসোল অ্যাপ ব্যবহার করার সময় এটি এমন সংস্করণ যা আমার জন্য কাজ করে:

var builder = new ConfigurationBuilder()
             .SetBasePath(Directory.GetCurrentDirectory())
             .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
             .AddJsonFile($"appsettings.{Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT")}.json", optional: true);

            IConfigurationRoot configuration = builder.Build();
            AppSettings appSettings = new AppSettings();
            configuration.GetSection("AppSettings").Bind(appSettings);

0

.vscode /unch.json ফাইলটি কেবল ভিজ্যুয়াল স্টুডিও পাশাপাশি / প্রোপার্টি / লঞ্চসেটেটিংস.জসন ফাইল দ্বারা ব্যবহৃত হয়। উত্পাদনে এই ফাইলগুলি ব্যবহার করবেন না।

আরম্ভ ফাইলগুলি:

  1. শুধুমাত্র স্থানীয় উন্নয়ন মেশিনে ব্যবহৃত হয়।
  2. মোতায়েন করা হয় না।
  3. প্রোফাইল সেটিংস রয়েছে।

    • সিস্টেম এনভায়রনমেন্টে প্রবর্তিত মানসমূহ সেটআপ হয়েছে

উদাহরণস্বরূপ 'অ্যাপসেটেটিংস.কিউএ.জসন' ফাইল ব্যবহার করুন। আপনি 'ASPNETCORE_ENVIRONMENT' ব্যবহার করতে পারেন। নীচের পদক্ষেপগুলি অনুসরণ করুন।

  1. হোস্ট মেশিনে একটি নতুন পরিবেশ পরিবর্তনশীল যুক্ত করুন এবং এটিকে 'ASPNETCORE_ENVIRONMENT' বলুন। এর মানটি 'কিউএ' তে সেট করুন।
  2. আপনার প্রকল্পে একটি ফাইল 'appSettings.QA.json' তৈরি করুন। আপনার কনফিগারেশন এখানে যুক্ত করুন।
  3. পদক্ষেপ 1 এ মেশিনে মোতায়েন করুন 'অ্যাপসেটিংস.কিউএ.জসন' নিশ্চিত করুন is
  4. আপনার ওয়েবসাইট লোড করুন। এখানে অ্যাপসেটেটিংস.কিউ.এজসন ব্যবহার করা হবে বলে আশা করি।
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.