c# - आवश्यक संजाल कॉन्फ़िगरेशन के साथ कॉन्फ़िगरेशन लेआउट लोड करना। नेट कॉन्फ़िगरेशन फ़्रेमवर्क




configuration configurationsection (2)

मेरे पास एक कंसोल एप्लिकेशन है जो web.config फ़ाइल से कस्टम कॉन्फ़िगरेशन काशन लोड करने का प्रयास कर रहा है।

कस्टम कॉन्फ़िगरेशन अनुभाग में एक कस्टम कॉन्फ़िगरेशन तत्व है जो आवश्यक है। इसका मतलब है कि जब मैं कॉन्फ़िग अनुभाग लोड करता हूं, तो मुझे एक अपवाद देखने की उम्मीद है, यदि वह कॉन्फ़िग तत्व कॉन्फ़िग में मौजूद नहीं है। समस्या यह है कि .NET ढांचे को पूरी तरह से isRequired विशेषता को अनदेखा कर रहा है। इसलिए जब मैं विन्यास अनुभाग लोड करता हूँ, मैं कस्टम विन्यास तत्व का एक उदाहरण बनाता है और इसे कॉन्फ़िग अनुभाग पर सेट करता हूं।

मेरा सवाल है, ऐसा क्यों हो रहा है? मैं GetSection () विधि को एक ConfigurationErrors अपवाद को आग्रह करना चाहता हूं क्योंकि एक आवश्यक तत्व कॉन्फ़िगरेशन से गुम है।

यहां मेरा कॉन्फ़िगरेशन अनुभाग कैसे दिखता है

public class MyConfigSection : ConfigurationSection
{
    [ConfigurationProperty("MyConfigElement", IsRequired = true)]
    public MyConfigElement MyElement
    {
        get { return (MyConfigElement) this["MyConfigElement"]; }
    }
}
public class MyConfigElement : ConfigurationElement
{
    [ConfigurationProperty("MyAttribute", IsRequired = true)]
    public string MyAttribute
    {
        get { return this["MyAttribute"].ToString(); }
    }
}

यहां बताया गया है कि मैं कैसे विन्यास अनुभाग लोड कर रहा हूं I

   class Program
    {
        public static Configuration OpenConfigFile(string configPath)
        {
            var configFile = new FileInfo(configPath);
            var vdm = new VirtualDirectoryMapping(configFile.DirectoryName, true, configFile.Name);
            var wcfm = new WebConfigurationFileMap();
            wcfm.VirtualDirectories.Add("/", vdm);
            return WebConfigurationManager.OpenMappedWebConfiguration(wcfm, "/");
        }

        static void Main(string[] args)
        {
            try{
                string path = @"C:\Users\vrybak\Desktop\Web.config";

                var configManager = OpenConfigFile(path);
                var configSection = configManager.GetSection("MyConfigSection") as MyConfigSection;

                MyConfigElement elem = configSection.MyElement;
            } catch (ConfigurationErrorsException ex){
                Console.WriteLine(ex.ToString());
            }
        }

मेरी कॉन्फ़िग फाइल इस तरह दिखती है

<?xml version="1.0"?>
<configuration>
  <configSections>
    <section name="MyConfigSection" type="configurationFrameworkTestHarness.MyConfigSection, configurationFrameworkTestHarness" />
  </configSections>

  <MyConfigSection>

  </MyConfigSection>

अजीब हिस्सा यह है कि यदि मैं कॉन्फ़िग फ़ाइल खोलता हूं और पंक्ति में 2 गुना लोड करता हूं, तो मुझे उम्मीद है कि मुझे अपवाद मिलेगा।

var configManager = OpenConfigFile(path);
var configSection = configManager.GetSection("MyConfigSection") as MyConfigSection;
configManager = OpenConfigFile(path);
configSection = configManager.GetSection("MyConfigSection") as MyConfigSection;

अगर मैं ऊपर कोड का उपयोग करता हूं, तो अपवाद आग जाएगा और मुझे बताएगा कि MyConfigElement आवश्यक है। सवाल यह है कि यह पहली बार अपवाद क्यों नहीं फेंक रहा है ??


एरिक ने एमएस फ़ोरम में इसका जवाब दिया है

उसका जवाब उद्धृत करने के लिए:

कॉन्फ़िगरेशन प्रॉपर्टी गुण के अनिवार्य सदस्य काम नहीं करता जब बाल ऑब्जेक्ट पर लागू होता है (कॉन्फ़िगरेशन एलेमेंट से प्राप्त होता है)


क्या आप इसे सीधे सही प्रकार के चर को निर्दिष्ट करने की कोशिश करते हैं, यानी MyConfigSection var के बजाय? यह एकमात्र अंतर है जो मैं कोड की दो लाइनों के बीच देख सकता हूं। (यानी दूसरी पंक्ति में, var ने अब एक विशिष्ट प्रकार लिया है)।





configurationelement