2011-01-22 10 views
8

मेरे पास विजुअल स्टूडियो 2010 में सी # कंसोल एप्लिकेशन है। इसमें मुख्य() विधि के साथ-साथ उपयोगिता वर्गों का समूह भी है। मैं उन उपयोगिता वर्गों को अन्य समाधानों के लिए उपलब्ध होना चाहता हूं। ऑनलाइन पढ़ने से ऐसा लगता है कि मुझे इसे क्लास लाइब्रेरी (डीएलएल) के रूप में संकलित करने की आवश्यकता है। तो यहाँ मैं क्या किया है:मैं निष्पादन योग्य की बजाय लाइब्रेरी के रूप में सी # कोड कैसे संकलित करूं?

  • दृश्य स्टूडियो में करने के लिए "परियोजना> [ProjectName] गुण> अनुप्रयोग" चला गया और "कंसोल आवेदन" को "कक्षा लाइब्रेरी"
  • पुनर्निर्माण से बदल "आउटपुट प्रकार"; ProjectName.dll बिन/डीबग में बनाया गया था।
  • एक नया कंसोल एप्लिकेशन
  • समाधान एक्सप्लोरर> संदर्भ जोड़ें> ProjectName.DLL पर ब्राउज़ करें, इसे चुनें।

हालांकि, न तो IntelliSense और न ही ऑब्जेक्ट ब्राउज़र उस DLL के अंदर कक्षाएं पा सकता है।

मैंने कक्षा पुस्तकालयों के रूप में कई अलग-अलग कंसोल अनुप्रयोगों को दोबारा बनाने की कोशिश की और मुझे एक ही परिणाम मिला। मैंने यह भी देखा कि यह काम करता है अगर मैं क्लास लाइब्रेरी के रूप में समाधान शुरू करता हूं, लेकिन अगर मैं इसे बाद में परिवर्तित नहीं करता हूं।

कोई सुझाव?

+0

मुझे लगता है कि आप अपने वर्ग पुस्तकालय में कक्षाओं का नाम स्थान पता है? यदि आप 'नेमस्पेस का उपयोग करके' नहीं जोड़ते हैं; अपने नए कंसोल एप्लिकेशन कोड में आपको कक्षा के नामस्थान संदर्भ को पूरी तरह अर्हता प्राप्त करने की आवश्यकता है। – tawman

+1

अपनी कक्षा पुस्तकालय में, सुनिश्चित करें कि आपकी कक्षाएं सार्वजनिक के रूप में भी चिह्नित हों। – tawman

+1

सुनिश्चित करें कि आपके वर्ग और विधियां सार्वजनिक हैं। –

उत्तर

5

आपको इसे एक डीएलएल के रूप में बनाने की आवश्यकता नहीं है। वीएस 2010 (और आईआईआरसी 2008) exe असेंबली संदर्भित करने की अनुमति देते हैं। आपको केवल public घोषित करने के लिए प्रासंगिक प्रकारों की आवश्यकता है - यदि आप कोई विनिर्देश नहीं जोड़ते हैं तो शीर्ष-स्तरीय कक्षाएं internal पर विफल होती हैं।

+0

यह तय है! धन्यवाद! – RexE

+0

क्या कोई भी इसके बजाय "क्लास लाइब्रेरी" के प्रकार के साथ कोई प्रोजेक्ट नहीं बना सकता? –

0

सुनिश्चित करें कि आपके डीएलएल प्रोजेक्ट में कक्षाएं सार्वजनिक हैं।

1

जो मैंने हमेशा किया है (चूंकि आप सी ++ स्थिर पुस्तकालयों के साथ ऐसा करते हैं, जो मैं सामान्य रूप से उपयोग करता हूं - हालांकि मुझे लगता है कि इसका सी # के लिए कुछ फायदे हैं) समाधान के लिए कक्षा पुस्तकालय की परियोजना को जोड़ना है, फिर परियोजना (या परियोजनाओं) में इसका संदर्भ जोड़ें जो इसका उपयोग करता है। जब आप कोई संदर्भ जोड़ने के लिए जाते हैं, संभावित संदर्भों की सूची में समाधान से आइटम शामिल होते हैं, इसलिए यह स्पष्ट रूप से स्पष्ट होना चाहिए कि क्या करना है। आपको अपनी लाइब्रेरी के लिए इंटेलिजेंस प्राप्त करना चाहिए।

इस तरह से काम करने का एक फायदा यह है कि यदि आपको लाइब्रेरी प्रोजेक्ट में फ़ाइलों को संपादित करने की आवश्यकता है, तो यह बहुत सरल है क्योंकि वे हाथ के करीब हैं, और जब आप समाधान संकलित करते हैं तो परियोजना स्वचालित रूप से पुनर्निर्मित हो जाती है।

0

पहले, प्रबंधित पुस्तकालयों के दृष्टिकोण से इससे कोई फर्क नहीं पड़ता कि किस प्रकार का आउटपुट प्रकार आपकी प्रबंधित लाइब्रेरी है। मेरा मतलब है कि आप ConsoleApplication2.exe प्रोजेक्ट से ConsoleApplication1.exe को सफलतापूर्वक संदर्भित कर सकते हैं (इसलिए आपके पास ConsoleApplication1.exe को ConsoleApplication1.dll में कनवर्ट करने का कोई कारण नहीं है)।

दूसरी बार, मैंने आपकी स्थिति को पुन: पेश करने की कोशिश की है, लेकिन ... बिना प्रभाव के। मेरा वीएस ConsoleApplication1.dll से प्रकार/विधियों को प्रदर्शित करता है। एक कारण मुझे लगता है कि आप अपनी उपयोगिता कक्षाओं के लिए दृश्यता संशोधक (सार्वजनिक कीवर्ड) सेट करना भूल गए हैं।

1

साथ ही आप इस परियोजना के गुणों में कक्षा पुस्तकालय के लिए उत्पादन प्रकार बदल सकते हैं - तो आप dll बजाय exe फ़ाइल के रूप में एक निर्गम होगा

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