2010-06-15 42 views
6

Trong ứng dụng web của tôi, tôi đang sử dụng NHibernate.dll. Điều này có một sự phụ thuộc vào lắp ráp folowing.Cách giải quyết các hội đồng xung đột trong .Net?

'Antlr3.Runtime, Version = 3.1.0.39271, Văn hóa = trung tính, PublicKeyToken = 3a9cab8f8d22bfb7'

Bây giờ trong cùng một dự án cho một yêu cầu tôi phải giới thiệu Antlr3.StringTemplate. dll. Trong đó có một sự phụ thuộc vào một phiên bản khác của hội đồng trên.

Nếu tôi sử dụng các phiên bản của Antlr3.Runtime.dll mà thỏa mãn NHibernate, Antlr3.StringTemplate bắt đầu phàn nàn và ngược lại.

Cách giải quyết tình huống như thế này?

Trả lời

5

Bạn có thể sử dụng assemblyBinding trong web.config để chuyển hướng phiên bản mới nhất của bạn lên phiên bản cũ.

Ví dụ:

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

này đi trực thuộc <configuration> nút trong web.config của bạn.

Bạn có thể đọc bout nó ở đây: http://msdn.microsoft.com/en-us/library/2fc472t2%28VS.71%29.aspx

4

Điều đơn giản nhất là biên dịch lại cả hai cùng một phiên bản. Hoặc, bạn có thể xóa thông số phiên bản khỏi tham chiếu (và đặt phiên bản cụ thể thành false).

1

Chúng tôi phải làm những gì Jim Lamb đề xuất. Chúng tôi đã xây dựng các phiên bản địa phương của tất cả "thư viện của bên thứ ba" (như chúng tôi đã gọi chúng), nhắm mục tiêu tên mạnh mẽ và phụ thuộc rõ ràng (so với những gì bạn có thể nhận được khi tải xuống dll tùy thuộc vào loại khác). Chúng tôi cam kết các bản dựng cục bộ này vào kho lưu trữ của chúng tôi (Subversion). Sau đó, chúng ta đặt các assembly kết quả trong một thư mục "Dependencies/lib" dưới thư mục gốc của mỗi dự án của chúng ta phụ thuộc vào các assembly đó. Điều này cho phép chúng tôi thêm chúng dưới dạng tham chiếu VS sử dụng khả năng vị trí đường dẫn tương đối của nó.

1

tôi đã có cùng một vấn đề.

tính năng bindingredirect có hoạt động cho bạn không?

tôi đã thử nó như thế này, nhưng không có gì thay đổi:

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

Cùng một lỗi xuất hiện.

Vì vậy, tôi quyết định đi với giải pháp thêm phiên bản cũ Antlr3.Runtime assembly vào gac. Bây giờ nó hoạt động hoàn hảo.

Các vấn đề liên quan