it-swarm.asia

قراءة الإعدادات من app.config أو web.config في .net

أعمل على مكتبة فئة C # تحتاج إلى أن تكون قادرًا على قراءة الإعدادات من ملف web.config أو app.config (بناءً على ما إذا كان DLL يتم الرجوع إليه من تطبيق ويب ASP.NET أو تطبيق Windows Forms) .

لقد وجدت ذلك

ConfigurationSettings.AppSettings.Get("MySetting")

يعمل ، ولكن تم تمييز هذا الرمز على أنه مهمل من قبل Microsoft.

لقد قرأت أنني يجب أن تستخدم:

ConfigurationManager.AppSettings["MySetting"]

ومع ذلك ، لا يبدو أن فئة System.Configuration.ConfigurationManager متاحة من مشروع C # Class Library.

لا أحد يعرف ما هي أفضل طريقة للقيام بذلك؟

709
Russ Clark

ستحتاج إلى إضافة مرجع إلى System.Configuration في مجلد المشروع الخاص بك مجلد المراجع .

يجب أن تستخدم بالتأكيد ConfigurationManager عبر المتقادم ConfigurationSettings.

725
womp

لعينة App.config مثل أدناه:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <appSettings>
    <add key="countoffiles" value="7" />
    <add key="logfilelocation" value="abc.txt" />
  </appSettings>
</configuration>

تقرأ إعدادات التطبيق أعلاه باستخدام الكود الموضح أدناه:

using System.Configuration;

قد تحتاج أيضًا إلى إضافة مرجع إلى System.Configuration في مشروعك إذا لم يكن هناك بالفعل أحد. يمكنك بعد ذلك الوصول إلى القيم مثل ذلك:

string configvalue1 = ConfigurationManager.AppSettings["countoffiles"];
string configvalue2 = ConfigurationManager.AppSettings["logfilelocation"];

أتمنى أن يساعدك هذا!

776
Ram

تحديث للإطار 4.5 و 4.6 ؛ لن يعمل التالي:

string keyvalue=System.Configuration.ConfigurationManager.AppSettings["keyname"];

الآن الوصول إلى فئة الإعداد عبر خصائص:

string keyvalue= Properties.Settings.Default.keyname;

انظر إدارة إعدادات التطبيق لمزيد من المعلومات.

69
bsivel

انقر بزر الماوس الأيمن على مكتبة الفصل الدراسي الخاصة بك ، واختر خيار "إضافة مراجع" من القائمة ؛ وأخيراً من علامة التبويب .NET ، حدد System.Configuration. ويشمل ذلك System.Configuration dll في مشروعك.

36
Shiva

أنا باستخدام هذا ويعمل بشكل جيد بالنسبة لي

textBox1.Text = ConfigurationManager.AppSettings["Name"];
29
Pagey

يجب أن تضيف إلى المشروع مرجعًا إلى System.Configuration Assembly.

21
Otávio Décio

قراءة من التكوين:

ستحتاج إلى إضافة مرجع إلى التكوين

  1. افتح "خصائص" في مشروعك
  2. انتقل إلى علامة التبويب "الإعدادات"
  3. أضف "الاسم" و "القيمة"
  4. احصل على قيمة باستخدام الكود التالي:

    قيمة السلسلة = Properties.Settings.Default.keyname؛

حفظ إلى التكوين:

   Properties.Settings.Default.keyName = value;
   Properties.Settings.Default.Save();
21
Masoud Siahkali

قد تقوم بإضافة ملف App.config إلى DLL. يعمل App.Config فقط للمشاريع القابلة للتنفيذ ، نظرًا لأن كل dll يأخذ التكوين من ملف التكوين الخاص exe الجاري تنفيذه.

دعنا نقول أن لديك مشروعين في الحل الخاص بك:

  • SomeDll
  • SomeExe

قد تتحول مشكلتك إلى حقيقة أنك تشمل app.config إلى SomeDLL وليس SomeExe. SomeDll قادر على قراءة التكوين من مشروع SomeExe.

17
Victor Naranjo

جرب هذا:

string keyvalue=System.Configuration.ConfigurationManager.AppSettings["keyname"];

في web.config يجب أن يكون الهيكل التالي:

<configuration>
<appSettings>
<add key="keyname" value="keyvalue" />
</appSettings>
</configuration>
9
Ruslan

واجهت نفس المشكلة ، فقط قرأها بهذه الطريقة:

System.Configuration.ConfigurationSettings.AppSettings["MySetting"]
8
Tom

يتم استخدام web.config مع تطبيقات الويب .web.config افتراضيًا به عدة تكوينات مطلوبة لتطبيق الويب. يمكنك الحصول على web.config لكل مجلد ضمن تطبيق الويب الخاص بك.

app.config يستخدم في تطبيقات ويندوز. عند إنشاء التطبيق في مقابل .net ، سيتم إعادة تسميته تلقائيًا إلى <appname>.exe.config ويجب تسليم هذا الملف مع التطبيق الخاص بك.

يمكنك استخدام نفس الطريقة للاتصال بقيم app settings من كلا ملفي التكوين:

System.Configuration.ConfigurationSettings.AppSettings["Key"]
7
Wavare Santosh

أيضا ، يمكنك استخدام فورمو :

التكوين:

<appSettings>
    <add key="RetryAttempts" value="5" />
    <add key="ApplicationBuildDate" value="11/4/1999 6:23 AM" />
</appSettings>

الشفرة:

dynamic config = new Configuration();
var retryAttempts1 = config.RetryAttempts;                 // returns 5 as a string
var retryAttempts2 = config.RetryAttempts(10);             // returns 5 if found in config, else 10
var retryAttempts3 = config.RetryAttempts(userInput, 10);  // returns 5 if it exists in config, else userInput if not null, else 10
var appBuildDate = config.ApplicationBuildDate<DateTime>();
4
pomber

أوصي بشدة لك بإنشاء التفاف لهذه الدعوة. شيء مثل ConfigurationReaderService واستخدم حقن التبعية للحصول على هذه الفئة. بهذه الطريقة ، ستتمكن من عزل ملفات التكوين هذه لأغراض الاختبار.

لذلك استخدم ConfigurationManager.AppSettings["something"]; المقترحة وأرجع هذه القيمة. يمكنك بهذه الطريقة إنشاء نوع من الإرجاع الافتراضي إذا لم يكن هناك مفتاح متاح في ملف .config.

4
Custodio

كما وجدت أفضل طريقة للوصول إلى متغيرات إعدادات التطبيق بطريقة منهجية عن طريق إنشاء فئة مجمّع عبر System.Configuration على النحو التالي

public class BaseConfiguration
    {
        protected static object GetAppSetting(Type expectedType, string key)
        {
            string value = ConfigurationManager.AppSettings.Get(key);
            try
            {
                if (expectedType == typeof(int))
                    return int.Parse(value);
                if (expectedType == typeof(string))
                    return value;

                throw new Exception("Type not supported.");
            }
            catch (Exception ex)
            {
                throw new Exception(string.Format("Config key:{0} was expected to be of type {1} but was not.",
                    key, expectedType), ex);
            }
        }
    }

يمكننا الآن الوصول إلى متغيرات الإعدادات المطلوبة بالأسماء المرمزة باستخدام فئة أخرى على النحو التالي

public class ConfigurationSettings:BaseConfiguration
    {
        #region App setting

        public static string ApplicationName
        {
            get { return (string)GetAppSetting(typeof(string), "ApplicationName"); }
        }

        public static string MailBccAddress
        {
            get { return (string)GetAppSetting(typeof(string), "MailBccAddress"); }
        }

        public static string DefaultConnection
        {
            get { return (string)GetAppSetting(typeof(string), "DefaultConnection"); }
        }

        #endregion App setting

        #region global setting



        #endregion global setting
    }
4
Ashwini Jindal

فقط للاكتمال ، هناك خيار آخر متاح لمشاريع الويب فقط:

System.Web.Configuration.WebConfigurationManager.AppSettings["MySetting"]

تكمن فائدة ذلك في أنه لا يتطلب إضافة إشارة إضافية ، لذلك قد يكون من الأفضل بالنسبة لبعض الأشخاص.

3
rdans

الخطوة 1: انقر بزر الماوس الأيمن فوق علامة تبويب المراجع لإضافة مرجع.

الخطوة 2: انقر فوق علامة التبويب التجميعات

الخطوة 3: البحث عن 'System.Configuration'

الخطوة 4: انقر فوق "موافق".

ثم سوف تعمل

 string value = System.Configuration.ConfigurationManager.AppSettings["keyname"];
2
Jitendra Suthar

لقد كنت أحاول العثور على إصلاح لهذه المشكلة نفسها لبضعة أيام الآن. تمكنت من حل هذه المشكلة عن طريق إضافة مفتاح داخل علامة appsettings في web.config. يجب أن يتجاوز هذا .dll عند استخدام المساعد.

<configuration>
<appSettings>
<add key="loginUrl" value="~/RedirectValue.cshtml" />
<add key="autoFormsAuthentication" value="false"/>
</appSettings>
</configuration>
1
Jason

الثابتة والمتنقلة التحقق. صافي نسخة كنت تعمل. يجب أن يكون أعلى من 4. وعليك إضافة مكتبة نظام System.Configuration إلى التطبيق الخاص بك

1
nayanajith

حل ممكن آخر:

var MyReader = new System.Configuration.AppSettingsReader();
string keyvalue = MyReader.GetValue("keyalue",typeof(string)).ToString();
1
sherite

أنا دائما إنشاء واجهة IConfig مع خصائص typeafe المعلنة لجميع قيم التكوين. لفئة تنفيذ التكوين ثم يلتف المكالمات إلى System.Configuration. أصبحت جميع مكالمات System.Configuration الخاصة بك الآن في مكان واحد أكثر سهولة ونظافة للحفاظ على وتعقب الحقول التي يتم استخدامها وإعلان قيمها الافتراضية. أكتب مجموعة من أساليب المساعد الخاص لقراءة وتحليل أنواع البيانات الشائعة.

باستخدام إطار عمل IoC ، يمكنك الوصول إلى حقول IConfig في أي مكان في التطبيق الخاص بك عن طريق تمرير الواجهة ببساطة إلى مُنشئ الفصل. ستتمكن أيضًا من إنشاء تطبيقات وهمية لواجهة IConfig في اختبارات الوحدة الخاصة بك حتى تتمكن من اختبار قيم التكوين ومجموعات القيم المختلفة دون الحاجة إلى لمس ملف App.config أو Web.config.

1
Tony O'Hagan

يمكنك استخدام أدناه ، في حالتي كان يعمل:

System.Configuration.ConfigurationSettings.AppSettings["yourKeyName"]

يجب أن تهتم بأن سطر التعليمات البرمجية أعلاه هو إصدار قديم وإهماله في مكتبات جديدة.

0
Mohammad D