2012-03-26 16 views
12

मैं एक साधारण क्लास लाइब्रेरी प्रोजेक्ट विकसित कर रहा हूं, जो मुझे एक डीएल देगा।क्लास लाइब्रेरी प्रोजेक्ट में App.config से पढ़ें

मैं किसी विशेष मूल्य एक कॉन्फ़िग फ़ाइल से पढ़ा जा करना चाहता था। इसलिए मैंने अपनी परियोजना में एक App.config फ़ाइल जोड़ दी है।

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

    <appSettings> 
    <add key="serviceUrl" value="test value" /> 
    </appSettings> 

    </configuration> 

ऊपर मेरी App.config फ़ाइल है, और अब मैं के रूप में

string strVal = System.Configuration.ConfigurationManager.AppSettings["serviceUrl"]; 

निम्नलिखित लेकिन मैं अपने स्ट्रिंग चर में किसी भी मूल्य नहीं मिल रहा है इसे पढ़ने के लिए कोशिश कर रहा हूँ।

enter image description here

मैं एक समान तरीके से एक वेब अनुप्रयोग के लिए किया था और यह काम किया। लेकिन किसी भी तरह से मैं यह काम नहीं कर पा रहा हूं।

एक वर्ग पुस्तकालय पहली जगह में सही परियोजना में App.config करने का विचार है?

+0

क्या आपके पास एकाधिक App.config फ़ाइलें हैं? डिबगिंग करने का प्रयास करें और ConfigurationManager.AppSettings में कुंजी गिनती पर नज़र डालें, अगर यह 0 प्रदर्शित करता है तो मुझे लगता है कि वीएस आपकी ऐप कॉन्फ़िगरेशन फ़ाइल का पता नहीं लगा रहा है। –

+0

मेरे पास एकल ऐप.कॉन्फिग है, और मैंने अपने डीबग – Yasser

+0

के स्क्रीन शॉट को संलग्न किया है, मुख्य प्रोजेक्ट में ऐप कॉन्फ़िगरेशन फ़ाइल जोड़ें, क्लास लाइब्रेरी असेंबली में नहीं। –

उत्तर

16

के रूप में मेरी टिप्पणी में कहा गया है, मुख्य समाधान के लिए और वर्ग पुस्तकालय परियोजना में नहीं app.config फ़ाइल जोड़ें।

+0

मेरे पास मेरे समाधान में दो परियोजनाएं हैं 1. कक्षा पुस्तकालय 2. टेस्ट प्रोजेक्ट जहां मैं इसे जोड़ूं? – Yasser

+0

परीक्षण परियोजना का प्रयास करें –

+0

इसे मिला! डैरेन के लिए धन्यवाद मैंने कोशिश की और अपने परीक्षण परियोजना के लिए app.config जोड़ा गया है और जैसा कि मैंने ConfigurationManager.AppSetting में टाइप कर रहा था ... मेरी ReSharper फिर से मुझे संकेत दिए जाने पर System.Configuration संस्करण 2.0 और 4.0 जिसके बारे में मुझे याद है मुझे लेने 4.0 पहले मेरी कक्षा प्रोजेक्ट में कोडिंग करते समय मैं वापस गया और 4.0 संदर्भ हटा दिया और 2.0 एक जोड़ा और अब यह काम करता है !! – Yasser

6

आपको app.config फ़ाइल जोड़ने की आवश्यकता नहीं है। आप वर्ग पुस्तकालय वेब आधारित आवेदन के लिए तो आप web.config फ़ाइल से सीधे प्राप्त कर सके कनेक्शन स्ट्रिंग बनाते हैं

या

आप इसे में कनेक्शन स्ट्रिंग के साथ किसी भी पाठ फ़ाइल जोड़ सकते हैं और कि स्ट्रिंग प्राप्त कर सके। सवाल यह मानते हुए

public static ConnectionStringSettings ConnSettings 
{ 
    get 
    { 
     string connectionStringKey = null; 
     connectionStringKey = ConfigurationManager.AppSettings.Get("DefaultConnectionString"); 
     return ConfigurationManager.ConnectionStrings[connectionStringKey];   
    } 
} 
+0

उत्तर के लिए धन्यवाद, और हाँ SO में आपका स्वागत है! – Yasser

1

का उपयोग कर एक कॉन्फ़िग फ़ाइल dll परियोजना के लिए विशिष्ट लिए पूछ रहा है, नहीं एप्लिकेशन या वेब अनुप्रयोग परियोजना की कॉन्फ़िग फ़ाइल, मैं निम्नलिखित कोड "sqlSection की कुंजियों का मान प्राप्त करने के लिए इस्तेमाल " अनुभाग। (एक चेतावनी यह है कि यह कॉन्फ़िगरेशन फ़ाइल - जब भी यह हमेशा कॉपी करने के लिए सेट की जाती है- स्वचालित रूप से वेब ऐप के आंशिक निर्माण पर प्रतिलिपि नहीं बनाई जाती है। इसलिए मैंने फ़ाइल की प्रतिलिपि बनाने के लिए भयानक एक-पंक्ति प्री-बिल्ड एक्शन का उपयोग किया, जैसा कि इस पोस्ट में उल्लेख किया गया है https://stackoverflow.com/a/40158880/1935056)।

यहाँ पूरे dll config फाइल

<?xml version="1.0" encoding="utf-8" ?> 


<sqlSection> 

<add key="sql1" value="--statement--"/> 
</sqlSection> 

इस ग # कोड है।

string GetSqlStatement(string key) 
    { 
      string path = Path.GetDirectoryName(Assembly.GetCallingAssembly().CodeBase) + @"\DataLayer.dll.config"; 

     XDocument doc = XDocument.Load(path); 

     var query = doc.Descendants("sqlSection").Nodes().Cast<XElement>().Where(x => x.Attribute("key").Value.ToString() == key).FirstOrDefault(); 

     if (query != null) 
     { 
      return query.Attribute("value").Value.ToString(); 
     } 
संबंधित मुद्दे