আরপম্যাপ অ্যাড-ইন দিয়ে অ্যাপ.সেটেটিংগুলি অ্যাপকনফাইগের পরিবর্তনগুলি স্বীকৃতি দিচ্ছে না?


14

আমি একটি আর্কম্যাপ অ্যাড-ইন তৈরি করেছি যার জন্য একটি কনফিগারেশন ফাইল দরকার। একটি একক অ্যাপ্লিকেশন থেকে কনফিগার মানগুলি পড়ার চেষ্টা করার পরে কিছুক্ষণ ব্যয় করার পরে (কনফিগ ফাইলটি (এবং সর্বদা নালু হয়ে যায়) আমি বিশ্বাস করি যে অ্যাড-ইনটি এখানে শ্রেণিক পাঠাগার হিসাবে মানগুলি পড়তে পারে না, এবং কলিং অ্যাপ্লিকেশনটির জন্য অনুসন্ধান করে (আর্কম্যাপ) যখন আমি কোনও কীটির মান জিজ্ঞাসা করি তখন কনফিগারেশন ফাইলটি (নাল)।

এটি পেতে আমি একটি অ্যাপ.সেটেটিং ফাইল ব্যবহার করেছি, যা অ্যাপ্লিকেশনটি ভাল করে পড়তে পারে। এটি তৈরি করা পরিবেশের মধ্যে একটি অ্যাপ.কনফিগ ফাইলও প্রবর্তন করে এবং ভিজ্যুয়াল স্টুডিওগুলি বিকাশের সময় দুটি ফাইলকে সিঙ্ক করে রাখে বলে মনে হয়।

এখন যখন অ্যাড-ইন স্থাপন করা হচ্ছে তখন আমার কনফিগারেশন মানগুলি (যেমন লগ ফাইলের অবস্থান) পরিবর্তন করতে হবে। আমি .esriaddin ফাইলটি খোলার / বের করার এবং সেখানে App.Config ফাইল আপডেট করার চেষ্টা করেছি তবে অ্যাড-ইনগুলি সংকলনের সময় একই কনফিগারেশন মানগুলি ধরে রেখেছে। আমি জানি যে নতুন App.Config মানগুলি .esriaddin ফাইলটিতে স্থির করা হচ্ছে কারণ আমি সংরক্ষণাগারটি বন্ধ করার পরে সেগুলি আবার দেখতে পারি।

কেউ কি অ্যাড-ইন কনফিগার করার একটি নির্ভরযোগ্য উপায় জানেন এবং এই কনফিগারেশনটি একবার মোতায়েনের পরে আপডেটযোগ্য হতে দেবেন? কোনও পরামর্শ খুব স্বাগত জানায় কারণ এটি হাস্যকর বলে মনে হচ্ছে এটির জন্য আমার একটি কাস্টম কনফিগার ফাইল থাকা উচিত।

অ্যাপ.সেটিংয়ের মানগুলি অ্যাপ্লিকেশন স্তরে থাকে এবং বর্তমানে অ্যাপ.সেটিংস এবং অ্যাপ.কনফাইগ উভয়েরই বিল্ড অ্যাকশন রয়েছে: কিছুই নেই / অনুলিপি করে না।

উত্তর:


8

অ্যাডিন কীভাবে কনফিগার করতে হয় তা আমি বের করেছিলাম।

এতে অ্যাডিন ফাইল ... নথি \ আর্কজিআইএস \ অ্যাড আইন্স \ ডেস্কটপ 10.0 ... প্রতিবার অর্কম্যাপ লোড হওয়ার ফলে প্রসারিত হয়, সুতরাং অ্যাডিনে এম্বেড থাকা যে কোনও কনফিগারেশন ফাইলগুলি সম্পাদনা করা যায় এমন একমাত্র স্থান এখানে। আমি রেজিস্ট্রি কীগুলি ব্যবহার করার জন্য বা একটি ডেডিকেটেড অ্যাডিন কনফিগারেশন ডিরেক্টরি ব্যবহার করার জন্য পরীক্ষা করিনি কারণ এটি কেবল ওভারকিল বলে মনে হয়েছিল।

শেষ পর্যন্ত আমি আমার অ্যাপ্লিকেশনগুলির জন্য একটি অ্যাপকনফাইগ ফাইল ব্যবহার করেছি (কারণ কোনও শ্রেণিবদ্ধ লাইব্রেরির সাথে যদি এটি ব্যবহার করা হয় তবে এটি কনফিগার ফাইলটি উপেক্ষা করে, এটি এখনও অ্যাসেমব্লির সাথে মিল রেখে নাম পরিবর্তন করে স্বয়ংক্রিয়ভাবে অ্যাডিন সংরক্ষণাগারে অন্তর্ভুক্ত হয়ে যায়) আমার সেটিংসের জন্য। উপরে প্রদত্ত লিঙ্কের ভিত্তিতে আমি নিম্নলিখিত কনফিগারেশন ক্লাসটি ব্যবহার করেছি

...

    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;
    }

...

অ্যাডইনটি স্থাপনের পরে কনফিগারটি সম্পাদনা করতে আমাকে আরকম্যাপটি বন্ধ করতে হবে, উইনরারের সাথে .esriAddIn ফাইলটি খুলতে হবে, \ ইনস্টল করুন এবং কনফিগারেশন ফাইলটি খুলুন, সম্পাদনা করুন, সম্পাদকটি বন্ধ করুন এবং তারপরে উইনারের ফাইলটি আপডেট করার অনুমতি দিন আর্কাইভ। তারপরে আরক্যাম্যাপটি পুনরায় লোড করা পরিবর্তনটি চলে Ann


আপনি কি ওপেনপ্যাডএক্সএক্সে কনফিগারেশন সহ ইদানীং কোনও ত্রুটি ঘটিয়েছেন? আমি একটি অনুরূপ পদ্ধতির ব্যবহার করছিলাম যা ঠিক কিছুদিন আগে পর্যন্ত কাজ করেছিল, সম্ভবত কিছু উইন্ডোজ আপডেট ইনস্টল করার পরে এটি কাজ করা বন্ধ করে দিয়েছে। আমার এই স্ট্যাকওভারফ্লো প্রশ্নটি দেখুন ।
blah238

@ blah238 আমি এই অ্যাড-ইনটি কিছুক্ষণ পরীক্ষা করে দেখিনি এবং এখনই সুযোগ পাওয়ার সুযোগ নেই। তবে আপনি যদি আপনার সাম্প্রতিক উইন্ডোজ / .NET আপডেটগুলি সংক্ষিপ্ত করতে পারেন তবে আমি দেখতে পাচ্ছি আমার (উইন 7) মিলছে কিনা এবং আপনাকে জানাতে পারি
টমফম্ব

কেবলমাত্র আমি যেটি প্রাসঙ্গিক বলে মনে হয়েছিল তা হ'ল নেটসুরক্ষা আপডেট । এটিও .NET 3.5 প্রভাবিত করতে পারে কিনা তা নিশ্চিত নই যা আমি টার্গেট করছি।
blah238

এফওয়াইআই, আমি .NET কনফিগারেশন সিস্টেমের পরিবর্তে traditionalতিহ্যবাহী এক্সএমএল (ডি) সিরিয়ালাইজেশন ব্যবহার করার জন্য আমার অ্যাড-ইন-এর কনফিগারেশন লজিকটি পুনরায় লেখার কাজ শেষ করেছিলাম, যার মূল অঙ্কনটি আমি বুঝতে পেরেছিলাম। .esriAddin ফাইল থেকে সমাবেশ - এমন কিছু যা আপনি বলতে পারবেন না, যতক্ষণ না আমি বলতে পারেন, একটি স্বেচ্ছাসেবী এক্সএমএল ফাইল দিয়ে করতে পারেন - তবে আমার উদ্দেশ্যগুলির জন্য আমি স্থির করেছিলাম যে সত্যই আমাকে ডিফল্ট কনফিগারেশন সরবরাহ করার দরকার নেই, কেবল অবিচল ব্যবহারকারী নির্দিষ্ট সেটিংস)। যদিও এটি অন্যান্য অ্যাড-ইন বিকাশকারীদেরকেও প্রভাবিত করছে কিনা তা আমি এখনও জানতে চাই।
blah238

। কনফিগ পদ্ধতির সাথে আরও কিছুটা হাঁটাচলা করা এবং ফিউশন প্রকাশ করে যে ইএসআরআই এসেম্বলি.লয়েডফ্রোম () অ্যাড-ইন সমাবেশগুলি লোড করার জন্য ব্যবহার করছে। আমি যা পড়েছি তা থেকে সর্বোত্তম অনুশীলনের বিরুদ্ধে যায় যা অ্যাড-ইনগুলির জন্য পৃথক অ্যাপডোমেন স্থাপন করে এবং কনফিগারেশনম্যানেজার কেন সমাবেশটি সঠিক স্থান অনুসন্ধান করতে বিরত হয় না তা ব্যাখ্যা করতে পারে। আমি যা বুঝতে পারি না তা হ'ল ডিফল্ট অ্যাপডোমাইনে এটি ইতিমধ্যে লোড হয়ে যাওয়ার পরে কেন আবার সমাবেশের সন্ধান করা প্রয়োজন। আমি কেবল ধরে নিতে পারি যে একটি .NET সুরক্ষা আপডেটের ফলে সমাবেশগুলির অবস্থানগুলি আরও প্রায়শই চেক করা শুরু হয়।
blah238

6

অনুরূপ উত্তর থেকে Bণ নেওয়া, আপনি এটি আপনার অ্যাডিনে ব্যবহার করতে পারেন:

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

টিপটির জন্য ধন্যবাদ, উপরোক্ত দ্বারা তৈরি পথটি বৈধ নয় যেমন এটি দেয় ... / addInName.dll / config.xML, তবে এটি আমাকে সঠিক পথে পেয়েছে। আমি এখন কিছুটা সহজ ব্যবহার করছিthis.GetType().Assembly.Location + ".config"
টমফম্ব

2

স্ট্যান্ডার্ড .NET কনফিগারেশন ফাইলটি অ্যাপ্লিকেশন অনুযায়ী প্রতি গ্রন্থাগার নয়। এর অর্থ হ'ল যখন আপনার অ্যাডিনটি আর্কম্যাপ প্রক্রিয়াটির মধ্যে চলে তখন আপনার কনফিগারেশন সেটিংসটি আরকমেপ.এক্সে.কনফিগে নির্দিষ্ট করা দরকার যা আরক্যাপ্যাপ.এক্সি ছাড়াও স্থাপন করা দরকার।

উত্পাদনের পরিবেশে এটি অবশ্যই সর্বদা সম্ভব নয় এবং অ্যাডিনগুলির বিচ্ছিন্নতা লঙ্ঘন করে, এটি অ্যাডিনগুলি প্রথম স্থানে প্রবর্তিত হওয়ার অন্যতম কারণ।

আপনার নিজের সেটিংসকে আলাদাভাবে সংরক্ষণ করতে হবে, হয় আপনার নিজের কনফিগারেশন ফাইলে (কার্কের উত্তরে ইঙ্গিত হিসাবে) বা সিস্টেম রেজিস্ট্রি।

আপনি আপনার কনফিগার ফাইলে পরিবর্তনগুলি বিভিন্ন উপায়ে পর্যবেক্ষণ করতে পারেন, উদাহরণস্বরূপ ফাইলসিস্টেমওয়াটার ক্লাসটি উপকৃত করা


1

কার্ক Kuykendall দ্বারা উত্তর না যেহেতু এটি .dll নিজেই প্রতি নির্দেশ রাখা, আমার জন্য কাজ করেনি। আমি কনফিগার ফাইলটিতে নির্দেশ করতে নিম্নলিখিতটি ব্যবহার করেছি

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

0

যদিও আমি ইএসআরআই অ্যাডিনের জন্য নতুন মডেলটির দিকে নজর দিইনি আমি অন্যদের দ্বারা যা করেছি এবং দেখেছি তা হ'ল রেজিস্ট্রিতে থাকা ইউজারহাইভের ব্যবহারকারী। তারপরে আপনার প্রয়োজনীয় মানগুলির ক্যানটি আপডেট করতে আপনার অ্যাডিনে একটি স্ক্রিন রাখতে পারেন।

একটি App.config ফাইল ব্যবহার করে আপনাকে নতুন মানগুলি পড়ার জন্য অ্যাপ / এক্সটেনশনটি পুরোপুরি পুনরায় চালু করতে হবে; যদিও রেজিস্ট্রি থেকে ফ্লাই অন আপডেট করা সহজ।


0

আপনি অ্যাড-ইন বিধানসভা ক্যাশে থাকা কনফিগারেশন ফাইলের অনুলিপিটি সংশোধন করার চেষ্টা করতে পারেন । আমি বিশ্বাস করি এসক্রিয়াডিন কেবল একবার আর্কজিআইএস দ্বারা প্রসারিত হয়। সুতরাং পরবর্তী পরিবর্তনগুলি ব্যবহার করা যাবে না (যদিও এটি বিবেচনা করা উচিত এসরিয়াডিন ফাইলটি তার ক্যাশে থেকেও নতুন)।

ভিস্তা /:: সি: \ ব্যবহারকারীগণ \\ অ্যাপ ডেটা \ স্থানীয় \ ইএসআরআই \ ডেস্কটপ 10.0 \ অ্যাসেম্বলিং ক্যাশে

এক্সপি: সি: u নথি এবং সেটিংস \\ স্থানীয় সেটিংস \ অ্যাপ্লিকেশন ডেটা \ ইএসআরআই \ ডেস্কটপ 10.0 \ সমাবেশ ক্যাশে


আকর্ষণীয় পরামর্শ কিন্তু দুর্ভাগ্যক্রমে এটি কোনও পার্থক্য তৈরি করতে পারেনি Arcআরক্যাম্যাপ শুরু হওয়ার সাথে সাথে এসেম্বলি ক্যাশে ডিরেক্টরিতে কনফিগারেশন ফাইলটি বেশি লেখা হয় - আমি কনফিগার ফাইলটি এখানে এবং অ্যাডইন এ ... \ নথিগুলিতে \ আর্কজিআইএস \ অ্যাড আইন্স \ ডেস্কটপ 10 এ পরিবর্তন করেছি। 0 সুতরাং ওভাররাইটের জন্য মানটি কোথা থেকে আসছে তা আমার কোনও ধারণা নেই!
টমফম্ব

ইনপুটটির প্রশংসা করুন, তবে এটি ডকুমেন্টস \ আর্কজিআইএস \ অ্যাডআইএনস \ ডেস্কটপ 10.0 \ ..... এ .esriAddIn ফাইলের মতো দেখে মনে হচ্ছে যতবার অ্যাপ্লিকেশন লোড হয়, তাই অ্যাড-ইন এসেম্বলি ক্যাশে সমস্ত পরিবর্তনগুলি হারিয়ে যায়।
tomfumb
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.