2012-07-23 15 views
15

से एप्लिकेशन सेटिंग्स नहीं लेता है मेरे पास कुछ एज़ूर सहायक वर्ग वाली लाइब्रेरी है। इन सहायक वर्गों के अंदर मैं Azure खाता नाम और कुंजी जैसी सेटिंग्स प्राप्त करता हूं। Azure में चलते समय इन सेटिंग्स को क्लाउड कॉन्फ़िगरेशन फ़ाइल (cscfg) से उठाया जाता है। यह सब ठीक काम करता है।क्लाउड कॉन्फ़िगरेशन प्रबंधक एप.कॉन्फिग

एज़ूर (विशेष रूप से रोलएन्वायरमेंट) के बाहर इन वर्गों की इकाई परीक्षण करने के लिए मैंने इकाई परीक्षण परियोजना के भीतर एक ही चर नामों की सेटिंग्स बनाई हैं। ये वास्तव में एक app.config फ़ाइल में सहेजे जाते हैं और सेटिंग्स अनुभाग के माध्यम से संपादित किए जाते हैं जो मेरे परीक्षण प्रोजेक्ट के गुण अनुभाग के अंतर्गत रहता है। Web.config/app.config सेटिंग्स से क्लाउड कॉन्फ़िगरेशन सेटिंग्स को सारणीबद्ध करने की अपनी स्वयं की विधि बनाने के बजाय मैंने क्लाउड कॉन्फ़िगरेशन प्रबंधक श्रेणी का उपयोग करने का निर्णय लिया। हालांकि, जब मैं अपना यूनिट परीक्षण चलाता हूं तो मेरी कोई भी सेटिंग नहीं उठाई जाती है, इसलिए मुझे बस शून्य मिलती है। हालांकि, मैं नीचे 'appSettings' प्रारूप में सेटिंग्स का उपयोग करने के लिए अपनी app.config फ़ाइल बदलता हूं, तो मुझे मान्य मान प्राप्त होते हैं। इसका नकारात्मक पक्ष यह है कि मैं दृश्य स्टूडियो के भीतर सेटिंग संपादक पृष्ठ का उपयोग करके अपनी सेटिंग्स संपादित नहीं कर सकता।

तो मेरा सवाल है कि मैं कुछ गलत कर रहा हूं या यह क्लाउड कॉन्फ़िगरेशन मैनेजर की एक सीमा है, जिससे यह मैन्युअल रूप से मैन्युअल रूप से जोड़े गए ऐप सेटिंग्स को चुन सकता है लेकिन एप्लिकेशन नहीं संपादन संपादक का उपयोग करके जोड़ा गया है?

<appSettings> 
    <add key="Foo" value="MySettingValue"/> 
</appSettings> 

ऊपर काम करता है, जबकि नीचे नहीं करता है:

<applicationSettings> 
    <ComponentsTest.Properties.Settings> 
     <setting name="Foo" serializeAs="String"> 
     <value>MySettingValue</value> 
     </setting> 
    </ComponentsTest.Properties.Settings> 
</applicationSettings> 

उत्तर

30

CloudConfigurationManager केवल AppSettings web.config/app.config की भाग का समर्थन करता है और यहाँ से मूल्यों को पढ़ने की कोशिश करेंगे अगर सेटिंग Azure कॉन्फ़िगरेशन से गुम है। प्रलेखन कहा गया है कि यह web.config/app.config नहीं पढ़ा जाएगा यदि संपत्ति RoleEnvironment.IsAvailable है सच (Azure में चल रहा है), लेकिन है कि गलत है के रूप में हम नीचे स्रोत कोड में देख सकते हैं (उपलब्ध है के लिए कोई जांच नहीं)।

तुम देखो क्या होता है source पर एक नज़र ले जा सकते हैं:

/// <summary> 
    /// Gets a setting with the given name. 
    /// </summary> 
    /// <param name="name">Setting name.</param> 
    /// <returns>Setting value or null if such setting does not exist.</returns> 
    internal string GetSetting(string name) 
    { 
     Debug.Assert(!string.IsNullOrEmpty(name)); 

     string value = null; 

     value = GetValue("ServiceRuntime", name, GetServiceRuntimeSetting); 
     if (value == null) 
     { 
      value = GetValue("ConfigurationManager", name, n => ConfigurationManager.AppSettings[n]); 
     } 

     return value; 
    } 

आप देख सकते हैं, वहाँ केवल एक सामान्य ConfigurationManager वर्ग कि बस AppSettings तक पहुँचता करने के लिए कॉल है।

+4

शायद इच्छापूर्ण सोच लेकिन यह अच्छा रहा होगा कि माइक्रोसॉफ्ट दस्तावेज वास्तव में यह कहता है। उत्तर के लिए धन्यवाद। –

+0

+1 अच्छी तरह से किया गया। मैंने कनेक्शन स्ट्रिंग के लिए इसका उपयोग करने की योजना बनाई थी। –

+0

@ किंगिंगर, यह कक्षा के बारे में [msdn लेख] (https://msdn.microsoft.com/en-us/LIBRARY/microsoft.windowsazure.cloudconfigurationmanager) में बताया गया है। –

संबंधित मुद्दे