هل هناك طريقة للحصول على مثيل System.Configuration.Configuration بناءً على XML التعسفي؟

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

سؤال

أحاول وحدة اختبار قسم التكوين المخصص الذي كتبته، وأرغب في تحميل بعض التكوينات العشوائية بتنسيق XML في ملف System.Configuration.Configuration لكل اختبار (بدلاً من وضع ملف تكوين الاختبار xml في الملف Tests.dll.config.وهذا يعني أنني أود أن أفعل شيئًا كهذا:

Configuration testConfig = new Configuration("<?xml version=\"1.0\"?><configuration>...</configuration>");
MyCustomConfigSection section = testConfig.GetSection("mycustomconfigsection");
Assert.That(section != null);

ومع ذلك، يبدو مدير التكوين سيوفر لك فقط مثيلات التكوين المرتبطة بملف EXE أو تكوين الجهاز.هل هناك طريقة لتحميل XML التعسفي في مثيل التكوين؟

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

المحلول

في الواقع هناك طريقة اكتشفتها....

تحتاج إلى تحديد فئة جديدة ترث من قسم التكوين الأصلي الخاص بك على النحو التالي:

public class MyXmlCustomConfigSection : MyCustomConfigSection
{
    public MyXmlCustomConfigSection (string configXml)
    {
        XmlTextReader reader = new XmlTextReader(new StringReader(configXml));
        DeserializeSection(reader);
    }
}


يمكنك بعد ذلك إنشاء كائن ConfigurationSection الخاص بك كما يلي:

string configXml = "<?xml version=\"1.0\"?><configuration>...</configuration>";
MyCustomConfigSection config = new MyXmlCustomConfigSection(configXml);

آمل أن يساعد شخص ما :-)

نصائح أخرى

أعتقد أن ما تبحث عنه هو ConfigurationManager.OpenMappedExeConfiguration

يسمح لك بفتح ملف التكوين الذي تحدده بمسار الملف (ملفوف داخل ملف ExeConfigurationFileMap)

إذا كان ما قاله الناشر الآخر صحيحًا، ولا ترغب في إنشاء ملف XML جديد بالكامل للاختبار، فإنني أنصحك بوضع تعديلات التكوين في طريقة الاختبار نفسها، ثم تشغيل اختباراتك مقابل التكوين الذي تم تغييره حديثًا بيانات.

بالنظر إلى أعضاء الفصل، أقول إن الإجابة ربما تكون لا*.لست متأكدًا من سبب رغبتك في القيام بذلك على أي حال، بدلاً من إنشاء ملف تكوين XML الخاص بك.

*هذا لا، باستثناء حيل التفكير الفوضوي

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