5

हमने सी # में एक लाइब्रेरी विकसित की है, और अब मैं लाइब्रेरी का सही ढंग से उपयोग करने में सहायता के लिए एक प्रोजेक्ट टेम्पलेट बनाना चाहता हूं।प्रोजेक्ट टेम्पलेट में अपने स्वयं के असेंबली के संदर्भों को शामिल करने का सबसे अच्छा तरीका क्या है?

मैं नई परियोजनाओं पुस्तकालय विधानसभा के लिए एक संदर्भ शामिल करना चाहते हैं, लेकिन GAC के लिए विधानसभा को तैनात करने, या विधानसभा कुछ विशिष्ट स्थान में रहने वाले पर निर्भर नहीं करना चाहते हैं।

क्या मैं सोच रहा हूँ प्रोजेक्ट टेम्पलेट .zip फ़ाइल में .dll शामिल करने के लिए है। इसका मतलब है कि यह नई परियोजनाओं के प्रोजेक्ट फ़ोल्डर के अंदर कहीं खत्म हो जाएगा। शायद लिब नामक एक फ़ोल्डर में। फिर प्रोजेक्ट फ़ाइल में संदर्भ संकेत उस फ़ोल्डर को इंगित कर सकता है। क्या यह एक बेहतर तरकीब है? मुझे सड़क पर क्या समस्याएं आ सकती हैं?

वहाँ शायद परियोजना टेम्पलेट्स में इस तरह के 3 पार्टी पुस्तकालयों है कि मैं के बारे में पता नहीं कर रहा हूँ सहित के लिए कुछ तंत्र है? आपने यह कैसे निपटाया है? निश्चित रूप से मैं पहले नहीं हूँ।

+0

जवाब कुछ हद तक कैसे आप अपने टेम्पलेट्स की तैनाती पर योजना पर निर्भर करता है। क्या आप वीएसआईएक्स का उपयोग कर रहे हैं? क्या आप एमएसआई (विंडोज इंस्टालर) या अन्य सामान्य प्रयोजन परिनियोजन तकनीक का उपयोग कर रहे हैं? क्या आप बस ज़िप फ़ाइल को वितरित करने और मैन्युअल इंस्टॉल निर्देश प्रदान करने की योजना बना रहे थे? –

उत्तर

3

मैंने पहले भी इस मुद्दे के समाधान के लिए किया है। एक मामले में, यह एक लॉगिंग लाइब्रेरी थी जिसे जीएसी में स्थापित किया गया था, जिसका अर्थ है संदर्भ तत्व को असेंबली नाम की आवश्यकता थी। एक अन्य मामले में, हम फाइल सिस्टम के लिए पुस्तकालय स्थापित है, एक रजिस्ट्री कुंजी है कि स्थान निहित बनाया (मामले उपयोगकर्ता प्यारा हो गया और हम पर स्थापना स्थान बदल) और एक project template wizard इस्तेमाल किया रजिस्ट्री कुंजी को देखने और एक प्रतिस्थापन को भरने के लिए संदर्भ के हिंटपाथ में सही स्थान रखने के लिए आइटम। (नोट: टेम्पलेट विज़ार्ड दृष्टिकोण के लिए आपको अपने विज़ार्ड की असेंबली को जीएसी में स्थापित करने की आवश्यकता है, जो ऐसा लगता है कि आप इससे बचने की कोशिश कर रहे हैं ...)

यदि आप नहीं चाहते हैं कि आपकी लाइब्रेरी को या तो इंस्टॉल किया जाए जीएसी या एक विशिष्ट स्थान, परियोजना में असेंबली समेत दृष्टिकोण आपका एकमात्र शेष विकल्प है। सकारात्मक तरफ, आपके प्रोजेक्ट टेम्पलेट की तैनाती काफी सरल है और आपको जीएसी, कस्टम विज़ार्ड इत्यादि के साथ मिलना नहीं है। नकारात्मक पक्ष पर, यदि आपने कभी भी अपनी लाइब्रेरी का नया संशोधन किया है, तो आपके उपयोगकर्ताओं को इसकी आवश्यकता होगी पुस्तकालय की हर परियोजना की प्रति अद्यतन करने के लिए।

+0

जीएसी में स्थापित करने के प्रभाव क्या हैं? इससे बचने के क्या कारण हैं? –

+1

प्राथमिक निहितार्थ यह है कि जीएसी में स्थापित असेंबली की प्रति "जीत"। ऐसा कहने के लिए, आपके पास अपने ऐप के फ़ोल्डर में एक अपडेट की गई प्रति हो सकती है, लेकिन जब तक मजबूत नाम मेल खाता है, रनटाइम अधिमानतः जीएसी से प्रतिलिपि लोड करेगा। एक मोटे तौर पर समान उदाहरण होगा जैसे कि GAC'ed असेंबली का पथ आपके PATH चर में पहली प्रविष्टि है और आपने लोड लाइब्रेरी कॉल जारी किया है। जब आप अपनी बाइनरी को अपडेट करने का प्रयास कर रहे हैं और व्यवहार रहस्यमय रूप से परिवर्तित नहीं होता है तो इसका अजीब व्यवहार हो सकता है। –

+1

इसके अलावा, हालांकि यह सीधे एक जीएसी मुद्दा नहीं है, मजबूत नामों का उपयोग करने का अर्थ है कि आपकी असेंबली के लिए अब एक असेंबली की आवश्यकता है जो मजबूत नाम से मेल खाती है; आपको या तो एक प्रकाशक नीति को फिर से संकलित या पंजीकृत करना होगा जो रीडायरेक्ट को नए संस्करण में बाध्य करता है। –

संबंधित मुद्दे

 संबंधित मुद्दे