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




appsettings (17)

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

لقد وجدت ذلك

ConfigurationSettings.AppSettings.Get("MySetting")

يعمل ، لكن تم وضع علامة على هذا الرمز على أنه تم إيقافه بواسطة Microsoft.

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

ConfigurationManager.AppSettings["MySetting"]

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

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


Answers

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

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


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

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


كما وجدت أفضل نهج للوصول إلى متغيرات إعدادات التطبيق بطريقة منهجية عن طريق جعل فئة المجمع على 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
    }

على سبيل المثال:

<applicationSettings>
        <MyApp.My.MySettings>
            <setting name="Printer" serializeAs="String">
                <value>1234 </value>
            </setting>
        </MyApp.My.MySettings>
    </applicationSettings>
Dim strPrinterName as string= My.settings.Printer

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

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


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

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

للحصول على عينة 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"];

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


حل آخر ممكن:

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

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

لنفترض أنك تمتلك مشروعين في حلك:

  • SomeDll
  • SomeExe

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


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

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

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

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

يمكنك استخدام نفس الأسلوب لاستدعاء قيم app settings من كلا ملفي التهيئة:

System.Configuration.COnfigurationSettings.AppSettings["Key"]

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


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

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

اقرأ من التكوين:

ستحتاج إلى إضافة مرجع إلى التهيئة

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

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

حفظ في التهيئة:

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

أيضًا ، يمكنك استخدام formo :

التكوين:

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

يجب إضافة إلى المشروع مرجع إلى تجميع System.Configuration.


بعض الخيارات التي استخدمتها:

إذا كان XLSX أمرًا ExcelPackage : يعد ExcelPackage بداية جيدة ولكنه توفي عندما يتوقف المطور عن العمل. ExML التقطت من هناك وإضافة بعض الميزات. ExML ليس خيارًا سيئًا ، ما زلت ExML في بضعة مواقع إنتاج.

بالنسبة إلى جميع NPOI الجديدة ، على الرغم من ذلك ، فأنا أستخدم NPOI ، وهو منفذ .NET لـ Apache POI . يدعم NPOI 2.0 (Alpha) أيضًا XLSX.





c# .net appsettings