2013-02-24 9 views
41

मैं थोड़ी देर के लिए मेरी web.config फ़ाइलों में इस खंड ध्यान दिया है और अब मैं बाहर तर्क करने वास्तव में क्या उद्देश्य है कोशिश कर रहा हूँ:web.config> विन्यास> रनटाइम> असेंबली बाइंडिंग में जेनरेट की गई प्रविष्टियों का अर्थ/कारण क्या है?

<runtime> 
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
     <dependentAssembly> 
     <assemblyIdentity name="System.Web.Helpers" publicKeyToken="31bf3856ad364e35" /> 
     <bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="2.0.0.0" /> 
     </dependentAssembly> 
     <dependentAssembly> 
     <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" /> 
     <bindingRedirect oldVersion="0.0.0.0-4.0.0.0" newVersion="4.0.0.0" /> 
     </dependentAssembly> 
     <dependentAssembly> 
     <assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35" /> 
     <bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="2.0.0.0" /> 
     </dependentAssembly> 
    </assemblyBinding> 
    </runtime> 

तो, पहली प्रविष्टि लगता है कहने के लिए:

सिस्टम.Web.Helpers 31bf3856ad364e35 की कुंजी टोकन के साथ एक निर्भर असेंबली का नाम है। संस्करण 1.0.0.0 को 2.0.0.0 संस्करण 2.0.0.0 पर रीडायरेक्ट करें।

मेरे सबसे अच्छा अनुमान है कि वह निष्पादित जैसे कि वह संकलित किया गया है इसका मतलब किसी भी कोड ASP.NET रन समय है कि निर्दिष्ट नाम जो भी निर्दिष्ट श्रेणी में एक संस्करण है के साथ एक विधानसभा पर निर्भर करता है के संदर्भ में क्रियान्वित है निर्दिष्ट सार्वजनिक कुंजी के साथ निर्दिष्ट संस्करण के साथ।

क्या इसका मतलब यह है कि यदि मेरे पास एक वेब प्रोजेक्ट है जो क्लास लाइब्रेरी पर निर्भर करता है और उस क्लास लाइब्रेरी में असेंबली के पुराने संस्करण का संदर्भ है जिसमें aa bindingRedirect है, तो कोड निष्पादित होगा जैसे कि इसे संकलित किया गया था नए संस्करण?

उत्तर

26

इस अगर मैं एक वेब परियोजना है कि एक वर्ग पुस्तकालय पर निर्भर करता है और उस वर्ग पुस्तकालय विधानसभा जो आ bindingRedirect है के एक पुराने संस्करण के लिए एक संदर्भ है है, कि कोड अगर के रूप में निष्पादित करेंगे मतलब यह है यह नए संस्करण के खिलाफ संकलित किया गया था?

आप इसे सही (मैं सिर्फ इतना कहना होगा "... कोड अगर यह नए संस्करण को संदर्भित किया गया के रूप में निष्पादित करेंगे"), देखने http://msdn.microsoft.com/en-us/library/7wd6ex19%28v=vs.110%29.aspx

"जब आप एक .NET का निर्माण किया है एक मजबूत नामित असेंबली के विशिष्ट संस्करण के विरुद्ध फ्रेमवर्क एप्लिकेशन, एप्लिकेशन रनटाइम पर असेंबली के उस संस्करण का उपयोग करता है। हालांकि, कभी-कभी आप असेंबली के नए संस्करण के विरुद्ध चलाने के लिए एप्लिकेशन चाहते हैं। "

+0

धन्यवाद, यही वह जानकारी है जिसे मैं प्राप्त करने की उम्मीद कर रहा था। क्या आपको लगता है कि आप इस बिंदु पर यह समझते हैं कि आपका उत्तर आधिकारिक है? (कृपया इसे गलत तरीके से न लें) –

+0

@AaronAnodide: नहीं, मुझे नहीं लगता कि मेरा जवाब आधिकारिक है। यह वही तरीका है जो मैं दस्तावेज़ीकरण को समझता हूं, और मैंने इसे कुछ ... 3 बार इस्तेमाल किया है। चिंता न करें मैं गलत नहीं लेता ;-) – jbl

+2

हाँ, आप लोग सही हैं, मैंने इसे उसी उद्देश्य के लिए उपयोग किया; उदाहरण के लिए कहें कि मेरे पास libA.dll नामक एक लाइब्रेरी है और libB.dll नामक एक और लाइब्रेरी है। LibA.dll का मेरा संस्करण libB.dll के संस्करण 1.0 के विरुद्ध संकलित किया गया है। मैंने libB.dll के एक नए संस्करण के साथ अपना एप्लिकेशन अपडेट किया है (1.5 कहें) और libA.dll अब काम नहीं कर रहा है। Libb.dll के नए संस्करण के साथ काम करने के लिए libA.dll प्राप्त करने के लिए रनटाइम को निर्देश देने के लिए मैं इस सुविधा का उपयोग करूंगा (दूसरा, तर्कसंगत रूप से बेहतर विकल्प है, अगर मेरे पास libA.dll का स्रोत कोड है जो इसे नए संस्करण के विरुद्ध संकलित करने के लिए है libB.dll)। –

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