2008-09-30 16 views
11

के लिए App.config हमारे पास एक "इंजन" है जो गतिशील रूप से डीएलएस लोड करता है (जो कुछ भी एक निश्चित निर्देशिका में स्थित है) और प्रतिबिंब के माध्यम से वर्कफ़्लो कक्षाओं को कॉल करता है।डीएल

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

लेकिन किसी कारण से मेरे वर्कफ़्लो को कॉन्फ़िगरेशन फ़ाइल नहीं दिखाई देती है।

<configuration> 
    <appSettings> 
     <add key="ConnectString" value="Data Source=officeserver;Database=mydatabase;User ID=officeuser;Password=officeuser;" /> 
    </appSettings> 
</configuration> 

ऊपर कॉन्फ़िग फ़ाइल को देखते हुए, निम्नलिखित कोड प्रिंट एक खाली स्ट्रिंग:

Console.WriteLine(ConfigurationManager.AppSettings["ConnectString"]); 

मुझे लगता है कि मैं क्या चाहते हैं सिर्फ एक config फ़ाइल नाम निर्दिष्ट करने के लिए है, लेकिन मैं यहाँ समस्या आ रही है। मुझे नतीजे नहीं मिल रहे हैं। किसी के पास कोई संकेत है?

+0

मुझे लगता है कि आपको कुछ विचार प्राप्त करने के लिए मेरे वीडियो का संदर्भ देना चाहिए http://www.youtube.com/watch?v=juBDM3fb-i0 –

उत्तर

7

यदि ऐपसेटिंग पढ़ने के लिए आपका कोड नमूना आपके डीएलएल में है, तो यह एप्लिकेशन के लिए कॉन्फ़िगरेशन फ़ाइल को पढ़ने का प्रयास करेगा और DLL के लिए कॉन्फ़िगरेशन फ़ाइल नहीं। ऐसा इसलिए है क्योंकि आप कोड निष्पादित करने के लिए प्रतिबिंब का उपयोग कर रहे हैं।

+0

धन्यवाद। यह हल हो गया। – daharon

4

मजेदार, जहां मैं हूं हम कुछ बहुत समान कर रहे हैं और कॉन्फ़िगरेशन फ़ाइल ठीक ठीक है। हमारे मामले में मुझे लगता है कि प्रत्येक नई कॉन्फ़िगरेशन फ़ाइल का नाम इसकी संबंधित असेंबली से मेल खाता है। तो MyLibrary.dll में फ़ाइल फ़ाइल असेंबली के लिए जानकारी के साथ MyLibrary.dll.config नाम की एक फ़ाइल होगी। साथ ही, मेरे पास आसान उदाहरण है C# के बजाय VB.Net का उपयोग कर रहा है (हमारे पास प्रत्येक में से कुछ है) और वीबी-विशिष्ट My.Settings नेमस्पेस के लिए सभी सेटिंग्स हैं, इसलिए हम सीधे कॉन्फ़िगरेशन प्रबंधक श्रेणी का उपयोग नहीं करते हैं उन को पढओ।

सेटिंग्स को स्वयं इस तरह दिखेगा:

<applicationSettings> 
    <MyLibrary.My.MySettings> 
     <setting name="SomeSetting" serializeAs="String"> 
      <value>12345</value> 
     </setting> 
    </MyLibrary.My.MySettings> 
</applicationSettings> 
0

अगर मैं सही ढंग से याद है, app.config आपके आवेदन निर्देशिका से लोड किया जाएगा, इसलिए यदि आप कुछ अन्य निर्देशिका से DLLs लोड कर रहे हैं, तो आप चाहते हैं आपके अनुप्रयोग की कॉन्फ़िगरेशन फ़ाइल में उन्हें आवश्यक कुंजी।

+0

धन्यवाद। ऐसा लगता है कि मेरी समस्या है। मैंने चीजों को चारों ओर बदल दिया और अब यह काम करता है। – daharon

0

मुझे पूरी तरह से यकीन नहीं है लेकिन मुझे लगता है कि कक्षा केवल डिफ़ॉल्ट रूप से ऐपडोमेन (समय के अधिकांश समय का मार्ग) के प्रवेश विधि के पथ के साथ काम करती है। आपको एक अलग कॉन्फ़िगरेशन फ़ाइल को इंगित करने के लिए पहले OpenExe कॉन्फ़िगरेशन (स्ट्रिंग exePath) (फ्रेमवर्क 2.0 और बाद में) को कॉल करने की आवश्यकता है।

1

मैंने इसे इसी तरह के सिस्टम के लिए लिखा था। मेरी यादें यह है कि मैंने डीएलएल के लिए फ़ाइल पथ प्राप्त करने के लिए Assembly.GetExecutingAssembly का उपयोग किया, उस नाम पर .config संलग्न किया, इसे XmlDocument के रूप में लोड किया गया, <appSettings> नोड पर नेविगेट किया और NameValueSectionHandler की Create विधि को पास कर दिया।

1

यहां एक तरीका है - AppDomain.CurrentDomain.SetData ("APP_CONFIG_FILE", "कॉन्फ़िगरेशन फ़ाइल का पथ");

कन्स्ट्रक्टर में कॉल करें।