c# - अगर मैं एक डीएलएल का पुनर्निर्माण करता हूं कि मेरा परियोजना संदर्भ, तो क्या मुझे इस परियोजना को भी पुनर्निर्माण करना होगा?




dll reference (4)

मैं यह कार्यक्रम ( FOO ) लिख रहा हूं, और इसमें डीएलएल ( BAR ) के संदर्भ शामिल हैं I सभी BAR में ऐसे कई तरीके शामिल हैं जो विभिन्न विभिन्न गणना करते हैं। FOO स्थापित करने और कई कंप्यूटरों पर तैनात होने में सक्षम होंगे। मेरा प्रश्न यह है, यदि मैं किसी एक विधि में एक फार्मूला बदलता हूं (यानी x + y से x - y ), तो क्या मुझे नए BAR विरुद्ध FOO को फिर से बनाना होगा? इससे भी महत्वपूर्ण बात, क्या यह बस BAR के नए संस्करण को तैनात करना सुरक्षित है?


@ vcsjones की टिप्पणी यहाँ एक महत्वपूर्ण मुद्दा उठाती है

आप प्रतिस्थापन के रूप में एक नया डीएलएल छोड़ सकते हैं अगर केवल अगर असेंबली का संस्करण नहीं बदलता है और आप मजबूत नामांकित विधानसभाओं का उपयोग नहीं कर रहे हैं।

यदि संस्करण बदलता है, तो आपको रनटाइम त्रुटियां प्राप्त हो सकती हैं क्योंकि आपका प्रोग्राम किसी विशिष्ट संस्करण को लोड करने की कोशिश करता है और उसे अपेक्षा से भिन्न संस्करण प्राप्त होता है। हालांकि कोई भी विधि हस्ताक्षर परिवर्तित नहीं हो सकता है, लेकिन यह ठीक से काम करता है, लेकिन मैं इसकी गारंटी नहीं देता है और हमेशा एक पुनः कंपाइल की सिफारिश करेगा

मजबूत नामांकित विधानसभाओं का प्रयोग करते समय यह एक समस्या का और भी अधिक है क्योंकि सशक्त नाम संविधान के एक डिजिटल हस्ताक्षर और संस्करण दोनों को एनकोड करता है। इसलिए अगर किसी भी कोड को विधानसभा में बदल दिया गया है तो डिजिटल हस्ताक्षर तब भी बदलेगा जब संस्करण नहीं होता है, इसलिए मजबूत नाम बदलता है।

फिर से रनटाइम त्रुटियों का कारण होगा क्योंकि आपके नाम का मजबूत नाम विधानसभा मजबूत नाम से मेल नहीं खाएगा। इसलिए इस मामले में एक पुनःसंयोजक हमेशा आवश्यक होता है।

संक्षेप में:

  • कोड परिवर्तन, कोई संस्करण बदलें और कोई मजबूत नाम - OKs
  • संस्करण बदलें और कोई मजबूत नाम - रीकंपाइल की आवश्यकता नहीं है, सुझाई गई
  • कोड बदलें और मजबूत नामांकित - पुनः कंपाइल की आवश्यकता है
  • संस्करण बदलें और मजबूत नामांकित - रीकंपाइल की आवश्यकता है

आपको यह सुनिश्चित करना है कि Bar परियोजना के लिए डीएलएल Foo प्रोजेक्ट के लिए बिन में है जब तक विधि हस्ताक्षर नहीं बदले हैं, आप अच्छे हैं


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


मामले में जहां संदर्भित विधानसभा का जोरदार नाम है: मान लीजिए कि कोई भी विधानसभा है, बी एक जोरदार-नामित असेंबली है, और संदर्भ बी। (फिर से ऊपर किए गए दावों के विपरीत?) बिना बी की सामग्री को बदलना संभव है ए को फिर से जोड़ना। मैं ए के लिए एक तुच्छ कंसोल एप्लिकेशन और बी के लिए कक्षा लाइब्रेरी के साथ ऐसा करने की कोशिश की। दृढ़ता से नामित बी में परिवर्तनों के कारण ए में कोई क्रम त्रुटि नहीं हुई। हालांकि, एक विशेष मामला है: यदि बी ट्रांसमिशन दृढ़ता से नामित करने के लिए जोरदार-नाम नहीं, फिर एक को पुनः कंपाइल करने की आवश्यकता है, अन्यथा रनटाइम त्रुटियां होनी चाहिए







reference