क्या .NET मेन 2.0 में कॉन्फ़िगरेशन मैनजर.ऐपसेटिंग उपलब्ध है?


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)

अलग-अलग, मैंने एक नया .NET कोर 2.0 कंसोल एप्लिकेशन बनाया (केवल इस समय .NET कोर 2.0 को लक्षित करना), लेकिन इसी तरह ConfigurationManagerनाम स्थान के नीचे कोई भी नहीं लगता है System.Configuration

मैं काफी उलझन में हूँ क्योंकि यह .NET मानक 2.0 के तहत उपलब्ध है, इसलिए मैं उम्मीद करता हूँ कि यह .NET कोर 2.0 में उपलब्ध होगा, क्योंकि .NET कोर 2.0 .NET मानक 2.0 के अनुरूप है।

मैं क्या खो रहा हूँ?


10
आप शायद भूल रहे हैं इस । (ध्यान दें कि .NET मानक लक्ष्य .NET और .NET कोर दोनों को कवर करता है , इसलिए वास्तव में उन्हें अलग से बनाने की कोई आवश्यकता नहीं है।)
Jeroen Mostert

धन्यवाद @JeroenMostert, NuGet संकुल को जोड़ते हुए। System.Configuration.ConfigurationManager ने समस्या का समाधान किया। अब, यह शायद एक अलग सवाल है, लेकिन .NET कोर 2.0 को .NET मानक 2.0 के अनुरूप कैसे माना जाता है, अगर किसी को लापता बिट्स को पॉलीफ़िल करने के लिए पैकेज जोड़ने की आवश्यकता है?
एलेक्स संसाऊ

2
".NET मानक 2.0 अनुपालन" का अर्थ है "यदि आप इसे .NET मानक 2.0 को लक्षित करने के लिए बनाते हैं, तो यह .NET कोर 2.0 (अन्य प्लेटफार्मों के बीच) पर चलेगा"। इसका मतलब यह नहीं है कि "यदि आप इसे .NET कोर 2.0 को लक्षित करने के लिए बनाते हैं, तो सभी .NET मानक 2.0 एपीआई आगे की कार्रवाई के बिना उपलब्ध होंगे"। यदि आप इसे .NET मानक 2.0 में बनाते हैं और यह .NET कोर पर नहीं चलेगा, तो आपके पास शिकायत का कारण होगा, लेकिन मुझे लगता है कि यह सिर्फ काम करने वाला है। (हालांकि, मैंने इसका परीक्षण नहीं किया है।)
जीरो मोस्टर्ट

4
@ AlexSanséau NuGet पैकेज पॉली-फिल नहीं हैं। .NET कोर पर काम शुरू करते समय Microsoft ने APIs को ऑप्ट-इन बनाने का निर्णय लिया, जिसका अर्थ है कि आपके अनुप्रयोगों का एक छोटा पदचिह्न है। मैं कुछ समय लेने की सलाह दूंगा और उन वीडियो को देखूंगा जो Immo Landwerth ने .NET Standard ( youtube.com/… ) पर बनाए हैं - वह .NET मानक टीम में PM हैं
Jamie Taylor

1
RE: It compiles fine when targeting .NET Standard 2.0 only- यह सही नहीं हो सकता, क्योंकि ConfigurationManager.NET मानक का हिस्सा नहीं है (अब तक यह v.2.1 तक सही है)।
जी। स्टोयनेव

जवाबों:


268

हां, ConfigurationManager.AppSettingsNuGet पैकेज को संदर्भित करने के बाद .NET कोर 2.0 में उपलब्ध है System.Configuration.ConfigurationManager

मुझे समाधान देने के लिए क्रेडिट @JeroenMostert पर जाता है।


1
क्या आप अपनी कॉन्फ़िग फ़ाइल से कोड पोस्ट कर सकते हैं? मैं यह पता लगाने की कोशिश कर रहा हूं कि मैं .NET कोर 2.0 में एक वैश्विक चर कैसे / कहां सेट करता हूं
उदाहरण के लिए

1
@egmfrs, क्या आप कृपया फिर से वाक्यांश मन करेंगे? वैश्विक चर एक वर्ग के स्थिर गुणों के रूप में मौजूद होंगे। विन्यास फाइल में अनुप्रयोग सेटिंग्स होती है उनका सामान्य प्रारूप होता है:<add key="YourSetting" value="YourValue" />
एलेक्स संसाऊ

2
@ AlexSanséau, मैं यह पता लगाने की कोशिश कर रहा हूं कि मैं AppSettings के लिए मान कहां सेट कर सकता हूं। web.config या appsettings.json काम नहीं करता है। क्या आप एक उदाहरण दे सकते हैं जहां AppSettings सेट करें? धन्यवाद।
जन अरबी

2
@JanDeutschl, यह आपके web.config या app.config के appSettings अनुभाग में जाना चाहिए, जैसा कि आप एक पारंपरिक .NET प्रोजेक्ट के लिए करते हैं।
एलेक्स संसेउ

8
मैं थोड़ा उलझन में हूं। यह .NET Framework 4.6एक निर्भरता के रूप में सूची करता है । क्या इसका मतलब यह है कि my` .NET Core` परियोजना अब एक शुद्ध Coreपरियोजना नहीं है?
जेम्स पोउलॉज

20

मैंने System.Configuration.ConfigurationManagerअपने .net core 2.2 एप्लीकेशन में Nuget से इंस्टॉल किया है।

मैं तो संदर्भ देता हूं using System.Configuration;

अगला, मैं बदल गया

WebConfigurationManager.AppSettings

to ..

ConfigurationManager.AppSettings

अब तक मेरा मानना ​​है कि यह सही है। 4.5.0 is typical with .net core 2.2

मेरा इससे कोई वास्ता नहीं है।


प्रवास के लिए करने के लिए एक आसान सुधार है। दूसरों में से कुछ इतने मज़ेदार नहीं हैं: /
टॉम स्टिकेल

क्या आपने एक web.config फ़ाइल भी बनाई है?
सिन_जुनियोर_देव

2
यह मेरे लिए काम नहीं करता है (.net core 3.1)। अगर पहुंच
आर्टेन

@Arteny - मैंने इसे 3.1 के साथ कभी नहीं देखा - मैंने 3.1 स्थापित किया और घर पर इसके साथ खेला - लेकिन मेरा वर्तमान ग्राहक कभी भी अपग्रेड नहीं करना चाहता है।
टॉम स्टिकेल

9

एक बार आपके पास पैकेज सेटअप हो जाने के बाद, आपको या तो एक app.config या web.config बनाना होगा और कुछ इस तरह जोड़ना होगा:

<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में संग्रह से आती हैं। दोनों परिवेशों में, स्थानीय और एज़्योर, GetEnvironmentVariable("<app setting name>")नामित ऐप सेटिंग के मूल्य को पुनः प्राप्त करता है। उदाहरण के लिए, जब आप स्थानीय रूप से चल रहे होते हैं, तो "My Site Name" को यदि आपके local.settings.json फ़ाइल में शामिल किया जाता है, तो वापस कर दिया जाएगा { "Values": { "WEBSITE_SITE_NAME": "My Site Name" } }

System.Configuration.ConfigurationManager.AppSettings संपत्ति एप्लिकेशन सेटिंग मान प्राप्त करने के लिए एक विकल्प के एपीआई है, लेकिन हम अनुशंसा करते हैं कि आप का उपयोग GetEnvironmentVariableजैसा कि यहाँ दिखाया।


इसे आज़माने वाले किसी भी व्यक्ति के लिए, आप इसे घोषित करके Microsoft उदाहरण के समान वाक्य रचना प्राप्त कर सकते हैं:using static System.Environment;
MattMakes

1

इसे हल करने के लिए आप कॉन्फ़िगरेशन का उपयोग कर सकते हैं।

पूर्व (स्टार्टअप)

आप इस कार्यान्वयन के बाद नियंत्रकों को DI से पास कर सकते हैं।

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

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