2010-06-15 35 views
6

Web uygulamamda NHibernate.dll kullanıyorum. Bu, folowing montajına bağımlıdır..Net'te çakışan derlemeler nasıl giderilir?

'Antlr3.Runtime, Sürüm = 3.1.0.39271, nötr Kültür =, PublicKeyToken = 3a9cab8f8d22bfb7'

Şimdi Antlr3.StringTemplate tanıtmak zorunda başka gereksinimi için aynı projede. dll. Yukarıdaki meclisin başka bir versiyonuna bağımlılığı olan. NHibernate karşılayan Antlr3.Runtime.dll, Antlr3.StringTemplate sürümünü kullanın

şikayet başlar ve tersi de geçerlidir.

Böyle bir durum nasıl çözülür?

cevap

5

En yeni sürümünüzü eski sürüme yeniden yönlendirmek için web.config aracınızda assemblyBinding öğesini muhtemelen kullanabilirsiniz.

Örnek:

<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> 

Bu web.config <configuration> düğümünün altında doğrudan gider.

Burada oynuyor okuyabilir: http://msdn.microsoft.com/en-us/library/2fc472t2%28VS.71%29.aspx

4

En basit şey, aynı sürümün her ikisine birden yeniden derlenmek olabilir. Veya, sürüm belirtimini referanstan kaldırabilirsiniz (ve belirli sürümü yanlış olarak ayarlayabilirsiniz).

1

Jim Lamb'in önerdiği şeyi yapmak zorundaydık. Güçlü isimleri ve açık bağımlılıkları (başka bir şeye bağlı olarak bir dll indirdiğinizde elde edebileceğinize karşı) hedefleyen tüm "3. parti kütüphanelerimizin" yerel versiyonlarını (bunları belirttiğimiz gibi) oluşturduk. Bu yerel yapıları depomuza (Subversion) geçirdik. Ardından, ortaya çıkan meclisleri, bu meclislere bağlı olan projelerimizin her birinin kökü altında bir "Dependencies/lib" klasörüne yerleştirdik. Bu, göreceli yol konumu yeteneklerini kullanarak bunları VS referansları olarak eklememize izin verdi.

1

i aynı problem vardı.

bindingredirect işini sizin için yaptı mı?

ben böyle denedim, ama hiçbir şey değişti:

<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> 

aynı hata ortaya çıktı.

Eski sürüm Antlr3.Runtime aksamını gac'e ekleme çözümüne karar verdim. Şimdi mükemmel çalışıyor.