অ্যাপসেটেটিংগুলি .config ফাইল থেকে মান পাবে


172

আমি কনফিগারেশন ফাইলের মানগুলিতে অ্যাক্সেস করতে সক্ষম নই।

Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
var clientsFilePath = config.AppSettings.Settings["ClientsFilePath"].Value; 
// the second line gets a NullReferenceException

.config ফাইল :

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <appSettings>
    <!-- ... -->
    <add key="ClientsFilePath" value="filepath"/>
    <!-- ... -->
  </appSettings>
</configuration>

আমার কি করা উচিত আপনার কোন পরামর্শ আছে?

উত্তর:


345

এটি আমার পক্ষে কাজ করে:

string value = System.Configuration.ConfigurationManager.AppSettings[key];

6
আমি যে কোডটি দিয়েছি তার জন্য আপনার প্রোগ্রামগ্রাম.এক্সে হিসাবে একই ফোল্ডারে থাকা আপনারProgram.exe.config ফাইলের প্রয়োজন। ঠিক আছে তা নিশ্চিত করুন। একটি সাধারণ ত্রুটি হ'ল অ্যাপ কোডফিগ ফাইলটি গন্তব্য ডিরেক্টরিতে অনুলিপি করা, যা কাজ করবে না।
অ্যাডাম

40
রেফারেন্স যুক্ত প্রয়োজন System.Configuration
চেকসাম

13
আমার .NET System.ConfigurationConfigurationManager
4.5- এ

3
আমি একটি 4.5 প্রকল্পেও শূন্যতা পাচ্ছি - এতে দু'ঘন্টা ব্যয় করেছে .. একটি বাগ হতে হবে।
আইরিশচাইটেফাইন

1
আমিও এটি একটি বহু-টার্গেট অ্যাপ্লিকেশনটিতে দেখছি, আমার। নেট কোর কনফিগারটি কাজ করে কিন্তু। নেট ফ্রেমওয়ার্ক কনফিগারেশন ব্যবহার করে না (কনফিগারেশন ম্যানেজার ব্যবহার করে)
মাইকেল ব্রাউন

61

Dtsg উত্তরটি কাজ করেছে:

string filePath = ConfigurationManager.AppSettings["ClientsFilePath"];

কিন্তু, আপনাকে এতে একটি সমাবেশ সংক্রান্ত রেফারেন্স যুক্ত করতে হবে

System.Configuration

আপনার সলিউশন এক্সপ্লোরার এ যান এবং রেফারেন্সে ডান ক্লিক করুন এবং রেফারেন্স যুক্ত করুন নির্বাচন করুনসমাবেশগুলি ট্যাবটি নির্বাচন করুন এবং কনফিগারেশনের জন্য অনুসন্ধান করুন ।

রেফারেন্স ম্যানেজার

এখানে আমার অ্যাপকনফাইগের উদাহরণ রয়েছে :

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
    </startup>
  <appSettings>
    <add key="AdminName" value="My Name"/>
    <add key="AdminEMail" value="MyEMailAddress"/>
  </appSettings>
</configuration>

যা আপনি নিম্নলিখিত উপায়ে পেতে পারেন:

string adminName = ConfigurationManager.AppSettings["AdminName"];

2
আমার মনে হয় ওপি-র মতো একই সমস্যা আছে। VS2015 ব্যবহার করে। আমি জানি না কীভাবে বা কেন, তবে আমার সিস্টেম সম্পর্কিত উল্লেখ on কনফিগারেশনটি System.configuration (লোয়ার কেস) বলে।
টিম

এটি কোনও "সমাবেশগুলি" ট্যাব নেই (যেখানে কমপক্ষে VS2019) আছে তা কভার করার উদ্দেশ্যে এটি করতে পারে
এলো

21

এই একবার যান:

string filePath = ConfigurationManager.AppSettings["ClientsFilePath"];

4
আপনার এটি প্রয়োগ অবশ্যই ভুল হতে হবে। এটি অবশ্যই একটি কনফিগার ফাইল থেকে মূল মান পুনরুদ্ধারের জন্য কাজ করে।
dtsg

আপনার প্রকল্পের রেফারেন্সগুলিতে আপনি সিস্টেম C কনফিগারেশনে কোনও রেফারেন্স যুক্ত করেছেন তা নিশ্চিত করুন!
গ্রাহামজে

19

কনফিগার থেকে পড়ুন:

আপনার কনফিগারেশনে একটি রেফারেন্স যুক্ত করতে হবে

  1. আপনার প্রকল্পে "সম্পত্তি" খুলুন
  2. "সেটিংস" ট্যাবে যান
  3. "নাম" এবং "মান" যুক্ত করুন
  4. নিম্নলিখিত কোড ব্যবহার করে মূল্য পান:
string value = Properties.Settings.Default.keyname;

কনফিগারে সংরক্ষণ করুন:

Properties.Settings.Default.keyName = value;
Properties.Settings.Default.Save();

4
কনফিগারেশনম্যানেজার ব্যবহার করে অন্য সমস্ত উত্তর কার্যকর না হওয়ায় আপনি যেমন বর্ণনা করেছেন যেমন প্রকল্পের বৈশিষ্ট্যের সেটিংস ট্যাবগুলিতে আপনার মানগুলি যুক্ত করেন তবে তা কার্যকর হয় না। ধন্যবাদ।
বোবা মুলা

2
এটি আমার পক্ষেও কাজ করেছিল। আমি nullউপরের সুপারিশগুলির সাথে একটি স্ট্রিং পাচ্ছিলাম , তবে Properties.Settings.Default.<keyName>একটি কবজির মতো কাজ করেছি!
ডাব শৈলী

1
পারফেক্ট! আমি এটি খুঁজছিলাম :) আপনাকে ধন্যবাদ!
এইচএসকিউএল

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

8

আমি ব্যাবহার করছি:

    ExeConfigurationFileMap configMap = new ExeConfigurationFileMap();
    //configMap.ExeConfigFilename = @"d:\test\justAConfigFile.config.whateverYouLikeExtension";
    configMap.ExeConfigFilename = AppDomain.CurrentDomain.BaseDirectory + ServiceConstants.FILE_SETTING;
    Configuration config = ConfigurationManager.OpenMappedExeConfiguration(configMap, ConfigurationUserLevel.None);
    value1 = System.Configuration.ConfigurationManager.AppSettings["NewKey0"];
    value2 = config.AppSettings.Settings["NewKey0"].Value;
    value3 = ConfigurationManager.AppSettings["NewKey0"];

কোথায় মান 1 = ... এবং value3 = ... নাল এবং দেয় VALUE2 = ... কাজ

তারপরে আমি অভ্যন্তরীণ অ্যাপ.config এর সাথে প্রতিস্থাপন করার সিদ্ধান্ত নিয়েছি:

// Note works in service but not in wpf
AppDomain.CurrentDomain.SetData("APP_CONFIG_FILE", @"d:\test\justAConfigFile.config.whateverYouLikeExtension");
ConfigurationManager.RefreshSection("appSettings");

string value = ConfigurationManager.AppSettings["NewKey0"];

ভিএস2012। নেট 4 ব্যবহার করা


এটি ঠিক আমার প্রয়োজন ছিল। সত্যিই সহায়ক, ধন্যবাদ।
উমুত ওভেকোগলু

5

ইন app/web.configফাইল নিম্নলিখিত কনফিগারেশন সেট করুন:

<configuration>
  <appSettings>
    <add key="NameForTheKey" value="ValueForThisKey" />
    ... 
    ...    
  </appSettings>
...
...
</configuration>

তারপরে আপনি এই লাইনটি রেখে আপনার কোডটিতে এটি অ্যাক্সেস করতে পারবেন:

string myVar = System.Configuration.ConfigurationManager.AppSettings["NameForTheKey"];

* দ্রষ্টব্য যে এই কাজের জন্য .net4.5.xএবং জরিমানা .net4.6.x; কিন্তু জন্য কাজ করবেন না .net core। শুভেচ্ছা: রাফেল


3

অনেক দিন পরে এই এক ফিরে আসতে ...

কনফিগারেশন ম্যানেজারের মৃত্যুর পরে, যে কেউ এখনও এই চেষ্টাটির উত্তর খুঁজছেন (উদাহরণস্বরূপ):

AppSettingsReader appsettingsreader = new AppSettingsReader();
string timeAsString = (string)(new AppSettingsReader().GetValue("Service.Instance.Trigger.Time", typeof(string)));

System.Configration অবশ্যই প্রয়োজন।

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


উত্তম উত্তর, তবে দয়া করে পরিষ্কার করুন, আপনি আবার অ্যাপসেটেটিংজেডার পুনরায় তৈরি করার সময় কেন অ্যাপসেটেটিং রিডারটির নতুন দৃষ্টান্ত তৈরি করুন এবং আপনার স্ট্রিং কাস্ট করার দরকার নেই, আপনি এটি কেবল .ToString () ওভাররাইডে শেষ করতে পারেন।
মায়থম - ɯɐɥʇʎɐɯ

2

দেখুন আমি যা করেছি যা আমি মনে করেছিলাম তা হ'ল সুস্পষ্ট বিষয়:

string filePath = ConfigurationManager.AppSettings.GetValues("ClientsFilePath").ToString();

এটি সংকলন করার সময় এটি সর্বদা শূন্য হয়।

এটি তবে (উপরে থেকে) কাজ করে:

string filePath = ConfigurationManager.AppSettings["ClientsFilePath"];

2

উত্তরগুলির মধ্যে কিছুটা আইএমও থেকে সামান্য দূরে বলে মনে হচ্ছে এখানে আমার নেওয়া সার্কিট 2016

<add key="ClientsFilePath" value="filepath"/>

System.Configurationরেফারেন্স হয়েছে তা নিশ্চিত করুন ।

প্রশ্ন একটি অ্যাপসেটিং কী এর মান জিজ্ঞাসা করছে

যা অবশ্যই হওয়া উচিত

  string yourKeyValue = ConfigurationManager.AppSettings["ClientsFilePath"]

  //yourKeyValue should hold on the HEAP  "filepath"

এখানে একটি মোচড় দেওয়া আছে যাতে আপনি এক সাথে মানগুলি ভাগ করতে পারেন (এই প্রশ্নের জন্য নয়)

var emails = ConfigurationManager.AppSettings[ConfigurationManager.AppSettings["Environment"] + "_Emails"];

emails এনভায়রনমেন্ট কী + "_ইমেলস" এর মান হবে

example :   jack@google.com;thad@google.com;

2

ওয়েব অ্যাপ্লিকেশনটির জন্য, আমি সাধারণত এই পদ্ধতিটি লিখব এবং কী দিয়ে এটি কল করব।

private String GetConfigValue(String key)
    {
       return System.Web.Configuration.WebConfigurationManager.AppSettings[key].ToString();
    }

1

আপনি কেবল টাইপ করতে পারেন:

string filePath = Sysem.Configuration.ConfigurationManager.AppSettings[key.ToString()];

কারণ keyএকটি বস্তু এবং AppSettingsএকটি স্ট্রিং লাগে


1
ConfigurationManager.RefreshSection("appSettings")
string value = System.Configuration.ConfigurationManager.AppSettings[key];

1

অথবা আপনি হয় ব্যবহার করতে পারেন

string value = system.configuration.ConfigurationManager.AppSettings.Get("ClientsFilePath");

//Gets the values associated with the specified key from the System.Collections.Specialized.NameValueCollection

0

আমার সাধারণ পরীক্ষাটিও এখানে অন্য উত্তরগুলির পরামর্শ অনুসরণ করে ব্যর্থ হয়েছিল - যতক্ষণ না আমি বুঝতে পেরেছি যে আমি আমার ডেস্কটপ অ্যাপ্লিকেশনটিতে যে কনফিগার ফাইলটি যুক্ত করেছি তার নাম "App1.config" দেওয়া হয়েছিল। আমি এটিকে "App.config" নামকরণ করেছি এবং সমস্ত কিছু সঙ্গে সঙ্গেই এটির মতো কাজ করেছে।


0
  1. আপনার প্রকল্পে "সম্পত্তি" খুলুন
  2. "সেটিংস" ট্যাবে যান
  3. "নাম" এবং "মান" যুক্ত করুন

কোড স্বয়ংক্রিয়ভাবে জেনারেটেড হবে

    <configuration>
      <configSections>
        <sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup ..." ... >
          <section name="XX....Properties.Settings" type="System.Configuration.ClientSettingsSection ..." ... />
        </sectionGroup>
      </configSections>
      <applicationSettings>
        <XX....Properties.Settings>
          <setting name="name" serializeAs="String">
            <value>value</value>
          </setting>
          <setting name="name2" serializeAs="String">
            <value>value2</value>
          </setting>
       </XX....Properties.Settings>
      </applicationSettings>
    </configuration>

একটি মান পেতে

Properties.Settings.Default.Name

অথবা

Properties.Settings.Default [ "নাম"]

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