.NET কোর ২.০ তে কনফিগারেশনম্যানেজ.অ্যাপসেটিংগুলি উপলব্ধ?


143

আমি একটি পদ্ধতি পেয়েছি যা আমার কনফিগারেশন ফাইল থেকে সেটিংস পড়তে পারে:

var value = ConfigurationManager.AppSettings[key];

শুধুমাত্র .NET স্ট্যান্ডার্ড 2.0 কে টার্গেট করার সময় এটি সূক্ষ্ম সংকলন করে।

এখন আমার একাধিক লক্ষ্যমাত্রা প্রয়োজন, তাই আমি আমার প্রকল্পের ফাইলটি এর সাথে আপডেট করেছি:

<TargetFrameworks>netcoreapp2.0;net461;netstandard2.0</TargetFrameworks>

তবে এখন, netcoreapp2.0নিম্নলিখিত ত্রুটি বার্তার সাথে সংকলন ব্যর্থ হয়েছে :

Error   CS0103  The name 'ConfigurationManager' does not exist in the current context   (netcoreapp2.0)

পৃথকভাবে, আমি একটি নতুন। নেট কোর ২.০ কনসোল অ্যাপ্লিকেশন তৈরি করেছি (কেবলমাত্র এবার নেটট কোর ২.০ লক্ষ্য করে), তবে একইভাবে ConfigurationManagerনেমস্পেসের আওতায় নেই বলে মনে হয় System.Configuration

আমি বেশ বিভ্রান্ত কারণ এটি নেট নেট স্ট্যান্ডার্ড ২.০ এর অধীনে উপলভ্য, সুতরাং আমি এটি নেট কোর ২.০-তে উপলব্ধ হওয়ার প্রত্যাশা করব, নেট কোর ২.০ হ'ল নেট স্ট্যান্ডার্ড ২.০ অনুবর্তী।

আমি কী মিস করছি?


10
আপনি সম্ভবত ভুলে গেছেন এই । (নোট করুন যে একটি নেট স্ট্যান্ডার্ড লক্ষ্য। নেট এবং। নেট কোর উভয়কে কভার করে , সুতরাং সেগুলি আলাদাভাবে আলাদাভাবে তৈরি করার দরকার নেই really)
জেরোইন মোস্টার্ট

ধন্যবাদ @ জিরোমনোস্টের্ট, নুগেট প্যাকেজ সিস্টেম যুক্ত করে। কনফিগারেশন C কনফিগারেশন ম্যানেজার সমস্যার সমাধান করেছে। এখন, এটি সম্ভবত একটি পৃথক প্রশ্ন তবে। নেট কোর ২.০ কে কীভাবে বিবেচনা করা হয়? নেট স্ট্যান্ডার্ড ২.০ অনুমানযোগ্য যদি কোনও একটি অনুপস্থিত বিটগুলিকে পলিফিলের জন্য প্যাকেজ যুক্ত করতে প্রয়োজন?
অ্যালেক্স সানসাউ 11

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

4
@ অ্যালেক্সসানসাউ নুগেট প্যাকেজগুলি পলিফিলস নয়। .NET কোর কাজ শুরু করার সময় মাইক্রোসফ্ট, এপিআইগুলিকে অপ্ট-ইন করার সিদ্ধান্ত নিয়েছে, এর অর্থ হল আপনার অ্যাপ্লিকেশনগুলির একটি ছোট পদচিহ্ন রয়েছে। আমি কিছুটা সময় নেওয়ার এবং ইমো ল্যান্ডওয়ার্থ .NET স্ট্যান্ডার্ড ( youtube.com/… ) এ তৈরি করা ভিডিওগুলি দেখার সুপারিশ করব - সে। নেট স্ট্যান্ডার্ড টিমের প্রধানমন্ত্রী
জেমি টেলর

1
RE: It compiles fine when targeting .NET Standard 2.0 only- এটি সঠিক হতে পারে না, কারণ ConfigurationManager.NET স্ট্যান্ডার্ডের অংশ নয় (এখনও পর্যন্ত এটি v.2.1 পর্যন্ত সত্য)।
জি স্টোনেভ

উত্তর:


268

হ্যাঁ, ConfigurationManager.AppSettingsনিউগেট প্যাকেজ উল্লেখ করার পরে .NET কোর 2.0 এ উপলব্ধ System.Configuration.ConfigurationManager

আমাকে সমাধান দেওয়ার জন্য ক্রেডিটগুলি @ জিরোয়ানমাস্টার্টে যায়।


1
আপনি কি আপনার কনফিগার ফাইল থেকে কোড পোস্ট করতে পারেন? আমি নেট কোর 2.0 তে কীভাবে / কোথায় বিশ্বব্যাপী ভেরিয়েবল সেট করেছি তা
জানার

1
@ ইজিএমফারস, দয়া করে আবার বাক্যাংশটি মনে করবেন? গ্লোবাল ভেরিয়েবলগুলি একটি শ্রেণীর স্থির বৈশিষ্ট্য আকারে উপস্থিত থাকবে। <add key="YourSetting" value="YourValue" />
কনফিগার

2
@ অ্যালেক্সসানসাউ, আমি অ্যাপসেটেটিংয়ের জন্য মানগুলি কোথায় নির্ধারণ করতে পারি তা জানার চেষ্টা করছি। web.config বা appsettings.json কাজ করে না। আপনি অ্যাপসেটিংস সেট করতে যেখানে একটি উদাহরণ দিতে পারেন? ধন্যবাদ।
জান

2
@ জ্যানডিউচচল, আপনার .cতিহ্যবাহী। নেট প্রকল্পের জন্য যেমন করা উচিত তেমনটি আপনার ওয়েবকনফিগ বা অ্যাপকনফাইগের অ্যাপসেটেটিং বিভাগে যেতে হবে।
অ্যালেক্স সানস্যাউ

8
আমি কিছুটা বিভ্রান্ত এটি .NET Framework 4.6নির্ভরতা হিসাবে তালিকা তৈরি করে । তার মানে কি এই যে আমার` নেট কোর longer প্রকল্পটি এখন আর একটি খাঁটি Coreপ্রকল্প নয়?
জেমস পোলুস

20

আমি System.Configuration.ConfigurationManagerনুগেট থেকে আমার। নেট কোর 2.2 অ্যাপ্লিকেশনটিতে ইনস্টল করেছি।

আমি তখন রেফারেন্স using System.Configuration;

এরপরে, আমি পরিবর্তন করেছি

WebConfigurationManager.AppSettings

to ..

ConfigurationManager.AppSettings

এখনও পর্যন্ত আমি বিশ্বাস করি এটি সঠিক is 4.5.0 is typical with .net core 2.2

এটি নিয়ে আমার কোনও সমস্যা হয়নি।


মাইগ্রেশন করার জন্য একটি সহজ সমাধান। অন্য কারও কারও এত মজাদার নয়: /
টম স্টিকেল 4'19

আপনি কি একটি ওয়েব.কমফিগ ফাইল তৈরি করেছেন?
সুইডিজ_জুনিয়র_দেব

2
এটি আমার পক্ষে কার্যকর হয় না (। নেট কোর 3.1)। অ্যাক্সেস থাকলে এর কোনও সেটিংসের ডেটা নেই
আর্টেনি

@ আর্টেনি - আমি কখনই এটি ৩.১-এর সাথে পরীক্ষা করে দেখিনি - আমি ৩.১ ইনস্টল করেছি এবং এটি ঘরে বসে খেললাম - তবে আমার বর্তমান ক্লায়েন্ট শীঘ্রই যে কোনও সময় আপগ্রেড করতে চায় না।
টম স্টিকেল

9

একবার আপনার প্যাকেজ সেটআপ হয়ে গেলে আপনার একটি অ্যাপকনফিগ বা ওয়েবকনফিগ তৈরি করতে হবে এবং নীচের মতো কিছু যুক্ত করতে হবে:

<configuration>
  <appSettings>
    <add key="key" value="value"/>
  </appSettings>
</configuration>

7

(থেকে: হেদায়েত সর্বশেষ সেট নিম্নরূপ https://docs.microsoft.com/en-us/azure/azure-functions/functions-dotnet-class-library#environment-variables )

ব্যবহার করুন:

System.Environment.GetEnvironmentVariable(name, EnvironmentVariableTarget.Process);

ডক্স থেকে:

public static class EnvironmentVariablesExample
{
    [FunctionName("GetEnvironmentVariables")]
    public static void Run([TimerTrigger("0 */5 * * * *")]TimerInfo myTimer, ILogger log)
    {
        log.LogInformation($"C# Timer trigger function executed at: {DateTime.Now}");
        log.LogInformation(GetEnvironmentVariable("AzureWebJobsStorage"));
        log.LogInformation(GetEnvironmentVariable("WEBSITE_SITE_NAME"));
    }

    public static string GetEnvironmentVariable(string name)
    {
        return name + ": " +
            System.Environment.GetEnvironmentVariable(name, EnvironmentVariableTarget.Process);
    }
}

স্থানীয়ভাবে বিকাশ করার সময় এবং অ্যাজুরে চলাকালীন অ্যাপ্লিকেশন সেটিংস উভয় পরিবেশের ভেরিয়েবলগুলি থেকে পড়া যায়। স্থানীয়ভাবে উন্নয়নশীল, অ্যাপ্লিকেশন সেটিংস থেকে আসা Valuesমধ্যে সংগ্রহ local.settings.json ফাইল। স্থানীয় এবং অজুরে উভয় পরিবেশে GetEnvironmentVariable("<app setting name>")নামযুক্ত অ্যাপ্লিকেশন সেটিংটির মান পুনরুদ্ধার করে। উদাহরণস্বরূপ, আপনি যখন স্থানীয়ভাবে চলছেন, আপনার স্থানীয়.সেটিংস.জসন ফাইল থাকলে "আমার সাইটের নাম" ফিরে আসবে { "Values": { "WEBSITE_SITE_NAME": "My Site Name" } }

System.Configuration.ConfigurationManager.AppSettings সম্পত্তি অ্যাপ্লিকেশন সেটিং মান পাবার জন্য একটি বিকল্প এপিআই, কিন্তু আমরা সুপারিশ করছি যে আপনি ব্যবহার GetEnvironmentVariableযেমন দেখানো হচ্ছে না।


যে কারও জন্য এটি চেষ্টা করে দেখার জন্য, আপনি মাইক্রোসফ্ট উদাহরণের মতো সিনট্যাক্স পেয়েছেন এটি ঘোষণা করে:using static System.Environment;
ম্যাটমেকস

1

এটি সমাধান করার জন্য আপনি কনফিগারেশন ব্যবহার করতে পারেন।

প্রাক্তন (স্টার্টআপ.স):

আপনি এই প্রয়োগের পরে ডিআই দ্বারা নিয়ন্ত্রকদের কাছে যেতে পারেন।

public class Startup
{
    public Startup(IHostingEnvironment env)
    {
        var builder = new ConfigurationBuilder()
        .SetBasePath(env.ContentRootPath)
        .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true);

        Configuration = builder.Build();

    }

    public IConfiguration Configuration { get; }

    // This method gets called by the runtime. Use this method to add services to the container.
    public void ConfigureServices(IServiceCollection services)
    {

        var microserviceName = Configuration["microserviceName"];

       services.AddSingleton(Configuration);

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