الاختلافات في السلوك بين system.web.configuration.webConfigurationManager و System.Configuration.ConfigurationManager

StackOverflow https://stackoverflow.com/questions/2060993

سؤال

واجهت بعض المتاعب على خادم الاختبار مع موقع ASP.NET. لقد تعثرت ، وكان الدليل المنزلي لموقع الويب الافتراضي يشير إلى المكان الخطأ. عندما حاولت:

ConfigurationManager.ConnectionStrings["connectionString"]; 

عاد لاغية ، ولكن

using System.Web.Configuration;

/* ... */

var rootWebConfig =
    WebConfigurationManager.OpenWebConfiguration(Request.ApplicationPath);

WebConfigurationManager.OpenWebConfiguration(Request.ApplicationPath);

rootWebConfig.ConnectionStrings.ConnectionStrings["connectionString"].ConnectionString;` 

أعاد سلسلة الاتصال الصحيحة.

ما هي كل الاختلافات بين النهجين؟

تحرير: ما أطلبه حقًا هو ، لماذا ConfigurationManager فشل النهج عندما يتم تعيين الدليل المنزلي بشكل غير صحيح ، لكنه ينجح على خلاف ذلك ، و WebConfigurationManager ينجح بغض النظر عما إذا كان الدليل المنزلي قد تم تعيينه بشكل صحيح؟ هل هناك أي اختلافات أخرى ، مثل الافتراضات حول التحكم في الوصول؟

هل كانت مفيدة؟

المحلول

جرب هذا:

ضع نقطة توقف حيث يوجد بيان configurationManager وتشغيل ما يلي في نافذة الإخراج الفوري ((ConfigurationSection) ConfigurationManager.GetSection("connectionStrings")).ElementInformation. تقارير الجهاز الخاصة بي مصدر: "C: Users John Documents Visual Studio 2008 Projects stackoverflowcode webapplication1 web.config" كما رأينا أدناه.

ملاحظة: يعرض ما يلي أيضًا أن المنجم هو الوصول إلى ASP.NET Web.config.

{System.Configuration.ElementInformation}
    Errors: {System.Configuration.ConfigurationException[0]}
    IsCollection: true
    IsLocked: false
    IsPresent: true
    LineNumber: 17
    Properties: {System.Configuration.PropertyInformationCollection}
    Source: "C:\\Users\\John\\Documents\\Visual Studio 2008\\Projects\\StackOverflowCode\\WebApplication1\\web.config"
    Type: {Name = "ConnectionStringsSection" FullName = "System.Configuration.ConnectionStringsSection"}
    Validator: {System.Configuration.DefaultValidator}

وعندما أركض ConfigurationManager.ConnectionStrings.ElementInformation انا حصلت مصدر:لا شيء وهو صحيح لتطبيق الويب الخاص بي.

ماذا تحصل على مسار مصدر التكوين ؟؟؟


افتراض فوري

ConfigurationManager.ConnectionStrings["connectionString"]; قد تبحث عن موقع تكوين ليس بالضرورة هو نفسه Web.Config لتطبيق الويب. من المحتمل أنه يبحث في دليل Windows (على سبيل المثال في مكان مختلف أو لـ Machine.config). محاولة العثور على اختبار مناسب لهذا رغم ذلك.


نوايا كل مدير

أعدادات النظام.مدير التكوين يمكن الوصول إلى تنسيق XML تكوين .NET مما يعني أنه يقرأ كلاهما:

  • تكوينات الويب (ie web.config ملف في ASP.NET)
  • وتكوينات غير وايب (eg app.config - تطبيق وحدة التحكم المستقلة ، تطبيق Windows ، إلخ)

ويعبر عن تلك الجوانب الشائعة في أنواع التكوين. هذا هو مدير التكوين للأغراض العامة. (ولكن على الرغم من هذه القدرة على النظر في كلا النوعين من التكوينات ، يجب عليك استخدامه لتكوينات التطبيق لأن مدير الويب مخصص لتكوينات الويب ، كما هو موضح بعد ذلك ...)

System.Web.Configuration.WebConfigurationManager يفعل نفس الشيء إلى حد كبير ولكن هو الإصدار "webified" من مدير التكوين ، مما يوفر الوصول إلى جوانب ASP.NET الخاصة بالمواقع الخاصة بالتكوين (على سبيل المثال ملف web.config في ASP.NET).

التشابه

انظر أوجه التشابه بين الأعضاء بين مدير التكوين.* و WebConfigurationManager.*

يمكن كلا المديرين ، على سبيل المثال ، الوصول إلى AppSettings الممتلكات و ConnectionStrings منشأه. في الواقع ، يعتبر كلا هذا الإعدادات شائعًا في كلا النوعين من التكوين ، بل إنهما موجودان في نفس المستوى في مستند XML.

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

الاختلافات السلوكية

الوصول إلى التكوين: لدى ConfigurationManager طرق لفتح تطبيقات التطبيق المستقل (أي myprogram.exe's app.config) بالنسبة إلى تطبيق exec ، في حين أن WebConfigurationManager لديه طرق لفتح ASP.NET Web Config بالنسبة إلى دليل جذر تطبيق الويب الخاص به في موقع الويب.

هذا أساسي app.config (على سبيل المثال ، تم افتتاحه عبر "C: winapp app.config" من مجلد القرص بواسطة مدير التكوين)

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <appSettings/>
  <connectionStrings/>
</configuration>

وهنا أساسي web.config (على سبيل المثال ، تم فتحه عبر "~" معنى جذر موقع الويب بواسطة WebConfigurationManager)

<?xml version="1.0"?>
<configuration>  
    <appSettings/>
    <connectionStrings/>

    <system.web>
        <!-- special web settings -->
    </system.web>

</configuration>

لاحظ أوجه التشابه. لاحظ أيضًا أن تكوين الويب يحتوي على إضافية system.web عنصر لـ ASP.NET.

يقع هؤلاء المديرون في مختلف التجميعات.

  • مدير التكوين: System.Configuration.dll
  • WebConfigurationManager: System.Web.dll

نصائح أخرى

يوفر First Class الوصول إلى ملفات تكوين العميل العامة (مثل App.Config) والثاني لملفات تطبيق الويب (مثل web.config).

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top