संस्करण 3.0 के बाद, .NET विभिन्न प्रोफाइल का समर्थन करने के लिए सी: \ प्रोग्राम फ़ाइलें \ संदर्भ असेंबली \ माइक्रोसॉफ्ट .... के तहत विभिन्न 'संदर्भ असेंबली' का एक गुच्छा स्थापित करता है (.NET 3.5 क्लाइंट प्रोफाइल, सिल्वरलाइट प्रोफ़ाइल कहें)। इनमें से प्रत्येक एक उचित .NET असेंबली है जिसमें केवल मेटाडाटा - कोई आईएल कोड नहीं है - और प्रत्येक असेंबली को ReferenceAssemblyAttribute
के साथ चिह्नित किया गया है। मेटाडेटा लागू प्रकार के तहत उपलब्ध उन प्रकारों और सदस्य तक सीमित है - इस प्रकार इंटेलिजेंस प्रकारों और सदस्यों के प्रतिबंधित सेट को दिखाता है। रेफरटाइम पर संदर्भ असेंबली का उपयोग नहीं किया जाता है।मैं .NET मेटाडाटा-केवल 'संदर्भ असेंबली' कैसे बना सकता हूं और उपयोग कर सकता हूं?
मैंने this blog post से इसके बारे में कुछ सीखा।
मैं अपनी लाइब्रेरी के लिए ऐसी संदर्भ असेंबली बनाना और उपयोग करना चाहता हूं।
- मैं मेटाडेटा-केवल असेंबली कैसे बना सकता हूं - क्या कुछ कंपाइलर ध्वज या ildasm पोस्ट प्रोसेसर है?
- क्या ऐसे गुण हैं जो नियंत्रित करते हैं कि किस प्रकार को विभिन्न 'प्रोफाइल' में निर्यात किया जाता है?
- रनटाइम पर संदर्भ असेंबली रिज़ॉल्यूशन कैसे करता है - अगर मेरे पास 'असली' असेंबली की बजाय मेरी एप्लिकेशन निर्देशिका में संदर्भ असेंबली मौजूद है, और जीएसी में नहीं, तो जारी रखने की जांच होगी और मेरी असेंबली रीसोल्व इवेंट आग होगी ताकि मैं रनटाइम पर वास्तविक असेंबली की आपूर्ति कर सकते हैं?
कोई विचार या पॉइंटर्स जहां मैं इसके बारे में अधिक जान सकता हूं, की सराहना की जाएगी।
अद्यतन: थोड़ा चारों ओर देखते हुए, मैं देख रहा हूँ .NET 3.0 'संदर्भ विधानसभाओं' कुछ कोड है लगता है, और Reference Assembly attribute केवल .NET 4.0 में जोड़ा गया है। तो नए रनटाइम के साथ व्यवहार थोड़ा बदल गया होगा।
क्यों? मेरे एक्सेल-डीएनए (http://exceldna.codeplex.com) ऐड-इन लाइब्रेरी के लिए, मैं संदर्भित असेंबली को संसाधनों के रूप में .xll फ़ाइल में पैक करके एकल-फ़ाइल .xll ऐड-इन बना देता हूं। पैक किए गए असेंबली में उपयोगकर्ता के एड-इन कोड, साथ ही एक्सेल-डीएनए प्रबंधित लाइब्रेरी (जिसे उपयोगकर्ता की असेंबली द्वारा संदर्भित किया जा सकता है) शामिल हैं।
यह अपेक्षाकृत जटिल लगता है, लेकिन अधिकांश समय में आश्चर्यजनक रूप से काम करता है - ऐड-इन एक छोटी फ़ाइल है, इसलिए वितरण समस्याओं की कोई स्थापना नहीं है। मैं अलग-अलग संस्करणों की वजह से (अप्रत्याशित) समस्याओं में भाग लेता हूं - यदि फ़ाइल के रूप में एक्सेल-डीएनए प्रबंधित लाइब्रेरी का पुराना संस्करण है, तो रनटाइम लोड किए जाने के बजाय लोड होगा (मुझे कभी हस्तक्षेप करने का मौका नहीं मिलता है लोड हो रहा है)।
मैं अपने एक्सेल-डीएनए प्रबंधित भाग के लिए एक संदर्भ असेंबली बनाने की उम्मीद करता हूं जो उपयोगकर्ता अपने ऐड-इन्स को संकलित करते समय इंगित कर सकते हैं। लेकिन अगर वे गलती से रनटाइम पर इस असेंबली का संस्करण रखते हैं, तो रनटाइम इसे लोड करने में विफल होना चाहिए, और मुझे संसाधनों से असली असेंबली लोड करने का मौका देना चाहिए।
क्यों आप ऐसा करना चाहते हैं? – svick