2013-04-09 7 views
12

मान लें कि मेरे पास संस्करणों के साथ जीएसी में असेंबली हैं, 1.1.1.5, 1.1.5.1, 1.1.6.2, 1.2.1.1 और 2.1.2.1। मेरे आवेदन में 1.1.3.0 संस्करण का संदर्भ है। रनटाइम पर कौन सी असेंबली का मिलान किया जाएगा? और असेंबली मिलान के लिए वास्तविक नियम क्या हैं?असेंबली संस्करण मिलान वास्तव में कैसे काम करता है?

उत्तर

7

आपके संदर्भ के लिए एक विशेष संस्करण की आवश्यकता है, तो डिफ़ॉल्ट रूप से, यह विधानसभा लोड पर, के रूप में असफल हो जायेगी उस संस्करण मौजूद नहीं है।

यह कॉन्फ़िगर किया गया जा सकता है, तथापि, Assembly Binding Redirection के माध्यम से। यहां क्या होगा इसके कई विकल्प हैं, जिनमें शामिल हैं:

  • संदर्भ कह सकता है कि यह संस्करण के बारे में परवाह नहीं करता है, इस मामले में नवीनतम लोड किया जाता है।
  • आप configure your application इस तरह से बता सकते हैं कि आप बाध्यकारी को पुनर्निर्देशित करने के तरीके को निर्दिष्ट करते हैं।
  • जीएसी में असेंबली setup with a publisher policy हो सकती है जो यह निर्दिष्ट करती है कि इसे कैसे संभाला जाए।
+0

क्या आप निश्चित हैं? क्योंकि यह प्रलेखन कहता है, 'समान नाम, प्रमुख, और मामूली संस्करण संख्याओं के साथ असेंबली, लेकिन अलग-अलग संशोधन पूरी तरह से परिवर्तनीय होने का इरादा है' http://msdn.microsoft.com/en-us/library/system.version.aspx – user960567

+0

@ user960567 मैंने केवल बिल्ड नंबर मिस्चैचिंग के साथ बाध्यकारी/लोड त्रुटियां भी की हैं। यह इरादा है, लेकिन नीति फ़ाइलों को अभी भी मौजूद होना जरूरी है। –

+0

क्या इसका मतलब है कि दस्तावेज़ीकरण सही नहीं है? – user960567

5

कौन सा विधानसभा रनटाइम पर मिलान किया जाएगा?

कोई भी मिलान नहीं किया जाएगा, आपका कार्यक्रम बम होगा।

वर्जन क्लास वार्ता के लिए प्रलेखन सामान्य रूप से संस्करण संख्याओं को चुनने के तरीके के बारे में बताता है। और हां, आप सामान्य रूप से बिल्ड नंबर में एक गैर-ब्रेकिंग परिवर्तन होने के लिए एक बदलाव पर विचार करते हैं। और संशोधन में परिवर्तन कम जोखिम होने के लिए। जब आप एक [असेंबलीफाइलवर्सन] चुनते हैं तो आप जिन चीजों पर विचार करते हैं।

हालांकि, डिफ़ॉल्ट CLR नीति नहीं की [AssemblyVersion] व्याख्या इस तरह की को लागू करता है, यह एक सटीक मैच पर जोर देता है। यह केवल तब खुश होता है जब यह सटीक उसी डीएलएल को ढूंढता है जिसे आपने अपने प्रोग्राम को संकलित किया था। यह सुनिश्चित करना मुश्किल नहीं है। आप इस नीति को ओवरराइड कर सकते हैं और इसे कमजोर बना सकते हैं, हालांकि आपको हमेशा इसके बारे में दो बार सोचना चाहिए। एक बहुत स्रोत कोड में अच्छी तरह से लक्षित मामूली परिवर्तनों का लंबा इतिहास है जो अभ्यास में अच्छी तरह से बाहर नहीं था। कुछ ऐसा जो माइक्रोसॉफ्ट बहुत अच्छी तरह से जानता है, दशकों के लिए रहता है जो कोड बनाए रखने के लिए। सीएलआर में डीएलएल नरक के खिलाफ डिफ़ॉल्ट काउंटर-उपाय एक चट्टान के रूप में कठिन हैं। जैसा कि वे होना चाहिए। इसे आप तक पहुंचा रहा है।

+0

http://msdn.microsoft.com/en-us/library/system.version.aspx पर दस्तावेज़ का अर्थ गलत है। मैंने फ्रेमवर्क 1.1 में इसका परीक्षण किया है, यह सिर्फ प्रमुख .minor से मेल खाने वाला संस्करण चुनता है। क्या यह 4.0 में बदल गया है? – user960567

+1

@user आपके द्वारा लिंक किए गए दस्तावेज़ इस उत्तर का विरोध नहीं करते हैं। जो भाग आप पढ़ रहे हैं वह शायद "टिप्पणियां" अनुभाग में है, जो * सम्मेलनों * के बारे में बात करता है। हंस कहते हैं कि मध्य अनुच्छेद में यही वही है।और कुछ सामान्य सलाह के रूप में, यदि आप 1.1 जैसे पुराने ढांचे में व्यवहार में रूचि रखते हैं, तो आपके प्रश्न में स्पष्ट रूप से इसका उल्लेख किया जाना चाहिए। उत्तरदाता वर्तमान या वर्तमान -1 संस्करण ग्रहण करने जा रहे हैं। –

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