2012-07-02 18 views
11

में configSection में संस्करण विशिष्ट जानकारी से बचें I app.config फ़ाइल में कुछ सेटिंग्स के प्रशासन के लिए एक छोटा जीयूआई बनाया है। जीयूआई को मेरे उत्पाद के हिस्से के रूप में जारी किया गया है, जिससे इसे एप.कॉन्फिग फ़ाइल में मूल्यों को बदलना संभव हो जाता है, इसे टेक्स्ट एडिटर में खोलने के बिना।app.config

गुण कस्टम कॉन्फ़िगरेशन में कार्यान्वित किए जाते हैं, जिससे इसे कोड में दृढ़ता से टाइप किया जाता है। मेरी समस्या यह है कि जब app.config फ़ाइल अद्यतन किया जाता है (जब मैं जीयूआई से बचाने के लिए), मेरे विधानसभा के पूरी तरह से योग्य नाम इस तरह configSection में लिखा है:

<section name="ConfigurationSettings" type="PerformanceDude.MSBuildShellExtension.Common.ConfigurationSettings, Common, Version=2.2.1.0, Culture=neutral, PublicKeyToken=1ab1b15115e63xxx" /> 

जब मैं करने के लिए इस विधानसभा के उन्नयन एक नया संस्करण संख्या, जीयूआई कोड असेंबली संस्करण अब app.config में असेंबली संदर्भों से मेल नहीं खाता है।

config.Save(ConfigurationSaveMode.Minimal, true); 

मैं एक उन्नत स्क्रिप्ट संस्करण हर मैं अद्यतन बदलते लिखने के लिए नहीं करना चाहती:

var config = ConfigurationManager.OpenMappedExeConfiguration(new ExeConfigurationFileMap() { ExeConfigFilename = ConfigFilePath }, ConfigurationUserLevel.None); 
var settings = Config.GetSection("ConfigurationSettings") as ConfigurationSettings; 

यह मैं कैसे सेटिंग्स सहेजने है:

यह मैं कैसे सेटिंग लोड है । क्या किसी को इस समस्या का एक बड़ा समाधान पता है?

+2

क्या कोड को क्रमबद्ध करने और कॉन्फ़िगर करने के लिए उपयोग किए जाने वाले कोड को शामिल करना संभव है? – dash

+0

लोड और सेव कोड अब विवरण में है :) – ThomasArdal

+0

क्या आपने कभी इसका समाधान निकाला है? – Zoomzoom

उत्तर

2

मुझे पहले भी ऐसा ही करना था। मैंने कॉन्फ़िगरेशन फ़ाइल को एक्सएमएल के रूप में लोड करना समाप्त कर दिया, प्रासंगिक वर्गों को ऑब्जेक्ट्स में डीरियलाइज करना, फिर उन्हें वापस एक्सएमएल में डालना। इस तरह से .NET कॉन्फ़िगरेशन API से बचें संस्करण के साथ समस्याओं से बचें।

एक और तरीका असेंबली के पुराने संस्करण को एक नए संस्करण में रीडायरेक्ट करना है। यदि आपकी असेंबली जीएसी में है, तो आप ऐसा करने के लिए पॉलिसी फाइलों का उपयोग कर सकते हैं, और जब आप एक नया संस्करण तैनात करते हैं तो उन्हें तैनात कर सकते हैं; तो कॉन्फ़िगरेशन में संस्करण संख्या कोई फर्क नहीं पड़ता।

+0

असल में --- यदि आप जीएसी में कॉन्फ़िगरेशन डीएलएल जोड़ते हैं तो आपको अपने कॉन्फ़िगरेशन सेक्शन को परिभाषित करते समय पूरी तरह से योग्य नाम की आवश्यकता नहीं है। आपको केवल (कक्षा, असेंबली) –

+0

निश्चित @SASS_Shooter है, लेकिन मुद्दा यह है कि अगर उसकी कोई पॉलिसी फाइल है तो उसे वहां वर्जन नंबर डालने पर ध्यान देने की आवश्यकता नहीं है। – tallseth

+1

डीएलएल जीएसी में नहीं है। अगर मैं एक्सएमएल के रूप में कॉन्फ़िगर लोड करता हूं, तो डेटा को दृढ़ता से टाइप नहीं किया जाएगा I C#। कॉन्फ़िगरेशन सेक्शन का उपयोग करने का पूरा विचार मेरे लिए प्रत्येक संपत्ति को लोड और सहेजने में सक्षम होना था जिसमें सी # ऑब्जेक्ट के माध्यम से दृढ़ता से टाइप किए गए गुण होते थे। हालांकि, आपके प्रस्ताव के लिए धन्यवाद :) – ThomasArdal