2010-06-15 13 views
6

मेरे वेब एप्लिकेशन में मैं NHibernate.dll का उपयोग कर रहा हूं। यह असेंबली असेंबली पर निर्भरता है।नेट में विरोधाभासी असेंबली को कैसे हल करें?

'Antlr3.Runtime, संस्करण = 3.1.0.39271, संस्कृति = तटस्थ, PublicKeyToken = 3a9cab8f8d22bfb7'

अब एक और आवश्यकता मैं Antlr3.StringTemplate पेश करने के लिए एक ही परियोजना में। डीएल। उपरोक्त असेंबली के दूसरे संस्करण पर निर्भरता है।

अगर मैं Antlr3.Runtime.dll जो NHibernate को संतुष्ट करता है, Antlr3.StringTemplate के संस्करण का उपयोग शिकायत शुरू होता है और इसके विपरीत।

इस तरह की स्थिति को कैसे हल करें?

उत्तर

5

आप शायद अपने नवीनतम संस्करण को पुराने संस्करण में रीडायरेक्ट करने के लिए अपने web.config में असेंबली बाइंडिंग का उपयोग कर सकते हैं।

उदाहरण:

<runtime> 
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
     <dependentAssembly> 
      <assemblyIdentity name="NHibernate" publicKeyToken="aa95f207798dfdb4"/> 
      <bindingRedirect oldVersion="2.1.0.4000" newVersion="2.1.2.4000"/> 
     </dependentAssembly>    
    </assemblyBinding> 
</runtime> 

यह आपके web.config में <configuration> नोड के अंतर्गत सीधे चला जाता है।

आप मुक्केबाज़ी इसे यहाँ पढ़ सकते हैं: http://msdn.microsoft.com/en-us/library/2fc472t2%28VS.71%29.aspx

4

सबसे सरल बात यह है कि एक ही संस्करण के विरुद्ध दोनों को पुन: संकलित करना होगा। या, आप संदर्भ से संस्करण विनिर्देश को हटा सकते हैं (और विशिष्ट संस्करण को गलत पर सेट कर सकते हैं)।

1

हमें जिम लैम्ब का सुझाव देना था। हमने अपने सभी "तृतीय पक्ष पुस्तकालयों" (जैसा कि हमने उन्हें डब किया है) के स्थानीय संस्करणों का निर्माण किया, मजबूत नामों और स्पष्ट निर्भरताओं को लक्षित करते हुए (बनाम जब आप एक डीएल डाउनलोड करते हैं तो आप क्या प्राप्त कर सकते हैं)। हमने इन स्थानीय निर्माण को हमारे भंडार (सबवर्जन) में बनाया है। फिर हमने परिणामी असेंबली को हमारी प्रत्येक परियोजना की जड़ के नीचे "निर्भरता/lib" फ़ोल्डर में रखा जो उन विधानसभाओं पर निर्भर था। इससे हमें अपने सापेक्ष पथ स्थान क्षमताओं का उपयोग करके वीएस संदर्भों के रूप में जोड़ने की अनुमति मिली।

1

मैं एक ही समस्या थी।

आपके लिए बाध्यकारी अप्रत्यक्ष काम किया था?

मैं इस तरह यह कोशिश की है, लेकिन कुछ भी नहीं बदला:

<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
     <dependentAssembly> 
      <assemblyIdentity name="Antlr3.Runtime" publicKeyToken="3a9cab8f8d22bfb7" culture="neutral" /> 
      <bindingRedirect oldVersion="*" newVersion="3.1.3.6002" /> 
      <publisherPolicy apply="no"/> 
     </dependentAssembly> 
    </assemblyBinding> 

एक ही त्रुटि दिखाई दिया।

तो मैंने पुराने संस्करण Antlr3 जोड़ने के समाधान के साथ जाने का फैसला किया। Gunt के लिए रनटाइम असेंबली। अब यह पूरी तरह से काम करता है।

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