2011-02-12 10 views
9

मेरे पास एक मौजूदा डीएलएल है जो सीएलएस-अनुरूप नहीं है कि मैं अपने स्वयं के प्रोजेक्ट से संदर्भित हूं। जब मैं सीएलएस-अनुपालन के रूप में अपनी असेंबली को चिह्नित करता हूं, तो मुझे संकलक चेतावनियां मिलती हैं कि संदर्भित असेंबली में नाम सीएलएस-अनुरूप नहीं हैं।क्या एक असेंबली जिसमें गैर-सीएलएस-अनुरूप संदर्भ शामिल है, सीएलएस-अनुरूप हो सकता है?

क्या कोई तरीका है कि मैं अपनी असेंबली सीएलएस-अनुपालन को रख सकता हूं और संदर्भित व्यक्ति को नहीं चिह्नित कर सकता हूं?

उत्तर

10

हां, आपका डीएलएल सीएलएस-अनुपालनशील हो सकता है जब तक कि यह संदर्भित असेंबली से किसी भी गैर-सीएलएस-अनुपालन सदस्यों का खुलासा न करे - यानी, यह किसी भी अपने सार्वजनिक या किसी भी व्यक्ति में इसका उल्लेख नहीं करता है संरक्षित सदस्यों या प्रकारों। (यह अभी भी उन्हें निजी और आंतरिक सदस्यों और प्रकारों में उपयोग कर सकता है।)

यदि आपके डीएलएल को गैर-अनुपालन डीएलएल से सीधे प्रकारों का पर्दाफाश करने की आवश्यकता है, तो आप या तो अपने स्वयं के रैपर में उन प्रकारों को encapsulating करने की कोशिश कर सकते हैं (उदाहरण के लिए एक विधि NaughtyType के बजाय MyWrapperAroundNaughtyType वापस कर सकता है), या आप उन सदस्यों को केवल कंपाइलर जांच से बाहर करने के लिए अपने एपीआई CLSCompliant(false) के प्रासंगिक सदस्यों को चिह्नित कर सकते हैं।

+0

क्या मुझे "एम्बेड इंटरप प्रकार" को गलत के रूप में चिह्नित करने की भी आवश्यकता है? (यह एक COM पुस्तकालय है जो अंडरस्कोर के नामों के कारण सीएलएस-अनुरूप नहीं है।) – ide

+0

मुझे यकीन नहीं है। चूंकि आपके द्वारा उपयोग किए जा रहे इंटरऑप प्रकार सार्वजनिक हैं, इसलिए उन्हें सार्वजनिक रूप से एम्बेड किया जाएगा, जिसका अर्थ है कि उन्हें सीएलएस-अनुपालन के लिए चेक किया जाएगा। लेकिन जब मैंने एक त्वरित प्रयोग किया तो यह ठीक लगता था - लेकिन शायद मैं अपने COM प्रकारों के साथ भाग्यशाली हो गया। शायद एक छोटी डमी असेंबली बनाने का प्रयास करें जो COM प्रकारों को समस्या का आयात करता है और इसे अपनी असली असेंबली के साथ शुरू करने से पहले इसे आजमाएं? – itowlson

+2

मैंने इसे 'माइक्रोसॉफ्ट.ऑफिस.इंटरोप.एक्ससेल' के साथ अभी कोशिश की है और अगर मैं इसे कहीं भी 'उपयोग' कथन में शामिल करता हूं तो चेतावनियां प्राप्त करें। ऐसा लगता है कि मेरी असेंबली को गैर-अनुपालन के रूप में चिह्नित करना या इंटरऑप प्रकारों को एम्बेड करना नहीं है। या मैं पूरी तरह से सभी वर्ग के नामों को अर्हता प्राप्त कर सकता हूं ... नहीं। – ide

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

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