2010-02-22 6 views
12

मेरे पास एक प्रोजेक्ट है, यानी library.exe। इसमें मैंने एक असेंबली (logging.dll ver 1.0.3.0) का संदर्भ दिया है और मैंने इस असेंबली को एक मजबूत नाम दिया है।हमें विधानसभा के मजबूत नाम को कब नहीं बनाना चाहिए? "मजबूत नामित असेंबली" के नुकसान क्या हैं?

अब मान लीजिए कि मैंने logging.dll में एक विधि बदल दी है और संस्करण 1.0.4.0 बनाया है।

अब जब मैं इस नए व्यक्ति के साथ पुराने डीएलएल की प्रतिलिपि/प्रतिस्थापित करता हूं तो मुझे अपवाद मिला। मुझे पता है कि अपवाद इसलिए है क्योंकि मैंने डीएलएल के संस्करण संख्या को बदल दिया है। चूंकि यह एक मजबूत नाम डीएलएल था, जब तक कि मैंने library.exe का पुनर्निर्माण नहीं किया।

क्या मैं ऊपर कहानी के साथ कहना चाहता हूँ जब हम GAC में जोड़ने के लिए है विधानसभा के साथ

  1. उपयोग मजबूत नाम है।
  2. यदि हमारे पास कोई ऐसा एप्लिकेशन है जहां व्यक्तिगत असेंबली को अपडेट करने की आवश्यकता होती है तो मजबूत नामित असेंबली का उपयोग न करें।

क्या मैं बिंदु 1 और 2 के साथ सही हूं?

मजबूत नामित असेंबली का उपयोग क्यों नहीं किया जाना चाहिए?

"मजबूत नामित असेंबली" के नुकसान क्या हैं?

उत्तर

3

दोनों सही।
यदि आपको बाद में असेंबली पर हस्ताक्षर करना है, तो वास्तविक प्रमाणपत्र के साथ आपको स्ट्रॉन्गनाम की आवश्यकता नहीं है।
मेरे विरोध में मजबूत नामकरण कुछ भी वास्तविक नहीं है, उदाहरण के लिए this link देखें। वैसे आपको जीएसी में एक असेंबली रखने के लिए इसकी ज़रूरत है, लेकिन यह है।

8

यदि आप जीएसी में अपनी असेंबली रखना चाहते हैं तो यह केवल वास्तव में जरूरी है, लेकिन यह छेड़छाड़ के खिलाफ भी मदद करता है। असेंबली में कोड को बदलना काफी आसान है, जिससे बुरे लोगों को फायदा होता है। जब आप मजबूत नामित असेंबली का उपयोग कर रहे हैं तो आप इसे केवल एक निजी कुंजी के साथ साइन कर रहे हैं। लोग अभी भी आपकी असेंबली बदल सकते हैं, लेकिन वे इसे एक ही मजबूत नाम नहीं दे सकते हैं, क्योंकि उनके पास आपकी निजी कुंजी नहीं है। उस मामले में .Net समेकित रूप से छेड़छाड़ से इंकार कर देता है। जब वे आपकी असेंबली को एक नई निजी कुंजी के साथ साइन करते हैं तो नेट अभी भी इसे लोड करने से इंकार कर देता है क्योंकि असेंबली की पहचान बदल गई है।

संस्करण समस्या को हल करने के कई तरीके हैं। जब आपका एप्लिकेशन v1 असेंबली लोड करना चाहता है तो आप उसे v2 v भी वैसे भी देखने के लिए कह सकते हैं। अधिक जानकारी के लिए here देखें। दूसरा विकल्प असेंबली संस्करण को बिल्कुल नहीं बदला जाएगा, बल्कि केवल असेंबली के फ़ाइल संस्करण को बदलने के लिए होगा। .NET के लिए असेंबली समान हैं, लेकिन आप और आपका इंस्टॉलर अभी भी देख सकता है कि कौन सा नया है। AssemblyFileVersion विशेषता देखें।