ArcMap ऐड-इन app.settings app.config परिवर्तन को पहचान नहीं के साथ?


14

मैंने एक ArcMap ऐड-इन विकसित किया है जिसमें एक कॉन्फ़िगरेशन फ़ाइल की आवश्यकता है। एक ही App.Config फ़ाइल से config मान पढ़ने की कोशिश करने में थोड़ी देर बिताने के बाद (और हमेशा अशक्त रहने वाला) मुझे विश्वास है कि ऐड-इन यहाँ से मानों को नहीं पढ़ सकता क्योंकि यह एक क्लास लाइब्रेरी है, और कॉलिंग एप्लिकेशन (ArcMap) की तलाश करता है जब मैं एक कुंजी के मूल्य (इसलिए शून्य) के लिए पूछता हूं, तो फाइल को कॉन्फ़िगर करें।

इसके आसपास पाने के लिए मैंने एक App.Settings फ़ाइल का उपयोग किया, जिसे एप्लिकेशन ठीक पढ़ सकता है। इसे बनाने से वातावरण में एक App.Config फ़ाइल भी आती है और Visual Studio विकास के दौरान दो फ़ाइलों को सिंक में रखता है।

अब जबकि ऐड-इन की तैनाती की जा रही है, मुझे कॉन्फ़िगरेशन मान (जैसे लॉग फ़ाइल स्थान) बदलने में सक्षम होना चाहिए। मैंने .esriaddin फ़ाइल को खोलने / निकालने और उसमें App.Config फ़ाइल को अपडेट करने की कोशिश की है, लेकिन ऐड-इन उसी कॉन्फ़िगरेशन मान को बरकरार रखता है जो संकलित होने पर था। मुझे पता है कि नए App.Config मूल्यों को .esaddin फ़ाइल में जारी रखा जा रहा है क्योंकि मैं संग्रह को बंद करने के बाद उन्हें फिर से देख सकता हूं।

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

App.Settings मान अनुप्रयोग स्तर पर हैं, और वर्तमान में App.Settings और App.Config दोनों ने कार्रवाई का निर्माण किया है: कोई भी / कॉपी नहीं करता है।

जवाबों:


8

मुझे पता चला कि एडिन को कैसे कॉन्फ़िगर किया जाए।

Addin फ़ाइल ... दस्तावेज़ \ ArcGIS \ AddIns \ Desktop10.0 ... में हर बार ArcMap लोड का विस्तार होता है, इसलिए एकमात्र स्थान जो कि ऐडिन में एम्बेड की गई कोई भी फ़ाइल संपादित की जा सकती है, यहाँ है। मैंने रजिस्ट्री कुंजियों का उपयोग करने या एक समर्पित एडिन विन्यास निर्देशिका का उपयोग करने के साथ प्रयोग नहीं किया क्योंकि यह बस ओवरकिल लग रहा था।

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

...

    public AppConfig()
    {
        try
        {
            ExeConfigurationFileMap map = new ExeConfigurationFileMap();
            map.ExeConfigFilename = this.GetType().Assembly.Location + ".config";
            config = ConfigurationManager.OpenMappedExeConfiguration(map, ConfigurationUserLevel.None);
        }
        catch (Exception)
        {
            ...
        }
    }

    private string getValue(string key) 
    {
        return config.AppSettings.Settings[key].Value;
    }

...

ऐडिन को एक बार डिफाइन करने के लिए एड आर्किन को बंद करने के बाद मुझे एड्रस को बंद करना होगा, विंसर के साथ .riridd फ़ाइल को खोलें, कॉन्फिग फाइल को इंस्टॉल और ओपन करें, इसे एडिट करें, एडिटर को बंद करें और फिर विंटर को फाइल के भीतर फाइल अपडेट करने दें। पुरालेख। फिर आर्कप को फिर से लोड करने से परिवर्तन अंदर चला जाता है। आमतौर पर यह पहली चीजों में से एक है जो मैंने कोशिश की थी, लेकिन मुझे लगता है कि मुझे समस्या थी क्योंकि कॉन्फ़िगरेशन फ़ाइल के लिए संपादक अभी भी खुला था जब winrar ने संग्रह को अपडेट किया।


क्या आपने OpenMappedExeConfiguration के साथ हाल ही में किसी त्रुटि में भाग लिया है? मैं इसी तरह के दृष्टिकोण का उपयोग कर रहा था जो कुछ दिनों पहले तक ठीक काम करता था, यह काम करना बंद कर देता है, शायद कुछ विंडोज अपडेट स्थापित करने के बाद। मेरा यह StackOverflow प्रश्न देखें ।
blah238

@ blah238 मैंने कुछ समय के लिए इस ऐड का परीक्षण नहीं किया है और अभी इसके लिए अवसर नहीं है। हालाँकि अगर आप अपने हाल के विंडोज / .NET अपडेट को संक्षेप में
बता

केवल एक मैंने देखा कि प्रासंगिक लग रहा था। एक .NET 4 सुरक्षा अद्यतन था । यकीन नहीं है कि अगर यह भी .net 3.5 को प्रभावित कर सकता है जो मैं लक्ष्य कर रहा हूँ।
blah238

FYI करें, मैंने .NET कॉन्फ़िगरेशन सिस्टम के बजाय पारंपरिक XML (डी) क्रमांकन का उपयोग करने के लिए अपने ऐड-इन के कॉन्फ़िगरेशन लॉजिक को फिर से लिखना समाप्त कर दिया है, जिसका मुख्य दोष मुझे लगा कि .config फ़ाइल स्वचालित रूप से साथ निकाली गई है। असेंबली .esriAddin फ़ाइल से - कुछ ऐसा जो आप नहीं कर सकते, जहाँ तक मैं बता सकता हूँ, एक मनमाना XML फ़ाइल के साथ - लेकिन मेरे उद्देश्यों के लिए मैंने निर्णय लिया कि मुझे वास्तव में एक डिफ़ॉल्ट कॉन्फ़िगरेशन की आपूर्ति करने की आवश्यकता नहीं है, केवल बनी रहती है उपयोगकर्ता-विशिष्ट सेटिंग्स)। मैं अभी भी जानना चाहूंगा कि क्या यह अन्य ऐड-इन डेवलपर्स को भी प्रभावित कर रहा है, हालांकि।
blah238

.Config दृष्टिकोण और संलयन के साथ थोड़ा और अधिक आस-पास घूमने से पता चलता है कि ESRI असेंबली का उपयोग कर रहा है। Ladadrom () ऐड-इन असेंबली लोड करने के लिए। मैंने जो पढ़ा है, वह उस सर्वोत्तम अभ्यास के खिलाफ जाता है जो ऐड-इन्स के लिए एक अलग AppDomain की स्थापना कर रहा है, और यह समझा सकता है कि क्यों कॉन्फ़िगरेशन मैनजर असेंबली को सही स्थान की तलाश में परेशान नहीं करता है। मुझे समझ में नहीं आ रहा है कि इसे फिर से विधानसभा की तलाश करने की आवश्यकता क्यों है जब यह पहले से ही डिफ़ॉल्ट AppDomain में लोड किया गया है। मैं केवल यह मान सकता हूं कि एक .NET सुरक्षा अद्यतन लागू करना शुरू कर दिया है कि विधानसभा स्थानों को अधिक बार चेक किया जाए।
blah238

6

इसी तरह के जवाब से उधार लेकर , आप इसे अपने एडिन में इस्तेमाल कर सकते हैं:

string configPath = System.IO.Path.Combine(this.GetType().Assembly.Location,"Config.xml");

टिप के लिए धन्यवाद, ऊपर दिया गया रास्ता मान्य नहीं है क्योंकि यह देता है ... / addInName.dll / config.xml, लेकिन यह मुझे सही रास्ते पर मिला। मैं अब this.GetType().Assembly.Location + ".config"
टॉमफम्ब

2

मानक .NET कॉन्फ़िगरेशन फ़ाइल प्रति एप्लिकेशन है, लाइब्रेरी के अनुसार नहीं। इसका मतलब यह है कि जब आपका एडिन आर्कपॉर्च प्रक्रिया के भीतर चलता है, तो आपकी कॉन्फ़िगरेशन सेटिंग्स को ArcMap.exe.config में निर्दिष्ट करने की आवश्यकता होती है, जिसे ArcMap.exe के अलावा रखा जाना चाहिए।

यह निश्चित रूप से उत्पादन के माहौल में हमेशा संभव नहीं होता है और यह भी एडिंस के अलगाव का उल्लंघन करता है, जो कि उन कारणों में से एक है जिन्हें एडिंस पहली बार में पेश किया गया था।

आपको अपनी सेटिंग्स को अपनी स्वयं की कॉन्फ़िगर फ़ाइल (किर्क के उत्तर में संकेत के रूप में) या सिस्टम रजिस्ट्री में अलग-अलग स्टोर करना होगा।

आप विभिन्न तरीकों से अपने विन्यास फाइल में बदलावों की निगरानी कर सकते हैं, उदाहरण के लिए फाइलसिस्टमवॉकर क्लास का लाभ उठाएं


1

किर्क Kuykendall द्वारा जवाब नहीं है, क्योंकि यह .dll खुद की ओर इशारा करते रखा, मेरे लिए काम किया है। मैंने कॉन्फिग फाइल की ओर इशारा करते हुए निम्नलिखित का उपयोग किया

System.IO.StreamReader file = new System.IO.StreamReader(System.IO.Path.GetDirectoryName(this.GetType().Assembly.Location) + "\\config.cfg");

0

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

App.config फ़ाइल का उपयोग करने से आपको नए मूल्यों को पढ़ने के लिए एप्लिकेशन / एक्सटेंशन को पूरी तरह से पुनरारंभ करने की आवश्यकता होती है; जबकि रजिस्ट्री से ऑन-द-फ्लाई अपडेट करना आसान है।


0

आप ऐड-इन असेंबली कैश में स्थित कॉन्फ़िगरेशन फ़ाइल की प्रतिलिपि को संशोधित करने का प्रयास कर सकते हैं । मेरा मानना ​​है कि एरिकादीन केवल एक बार आर्कगिस द्वारा विस्तारित हो जाता है। इसलिए बाद के संशोधनों का उपयोग नहीं किया जा सकता है (हालांकि यह नोट करना चाहिए कि एस्ड्रैडिन फ़ाइल अपने कैश की तुलना में नया है)।

विस्टा / 7: C: \ Users \\ AppData \ Local \ ESRI \ Desktop10.0 \ AssemblyCache

XP: C: \ Documents and Settings \\ Local Settings \ Application Data \ ESRI \ Desktop10.0 \ AssemblyCache


दिलचस्प सुझाव लेकिन दुर्भाग्य से इसमें कोई फर्क नहीं पड़ा। अर्चन शुरू होने पर असेंबली कैश डायरेक्टरी में कॉन्फिग फाइल ओवर-राइट हो जाती है - मैंने यहाँ पर कॉनफिगर फाइल को बदल दिया और ऐड इन ... \ डॉक्यूमेंट्स / आर्कजीस \ एडइन्स \ डेस्कटॉप 10। 0 इसलिए मुझे नहीं पता कि ओवरराइट के लिए मूल्य कहां से आ रहा है!
टॉमफंब

इनपुट की सराहना करें, लेकिन ऐसा लगता है कि दस्तावेज़ों में .esriAddIn फ़ाइल \ ArcGIS \ AddIns \ Desktop10.0 \ ..... वास्तव में हर बार एप्लिकेशन लोड होने पर निकाली जाती है, इसलिए ऐड-इन असेंबली कैश में सभी परिवर्तन खो जाते हैं।
टॉमफंब
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.