2012-12-14 31 views
5

Chúng tôi đang nhận được một cuộc xung đột lắp ráp sau khi chúng tôi cập nhật Newtonsoft.Json. Tôi gặp sự cố khi biết phiên bản cụ thể được tham chiếu trong lỗi đến từ đâu. Không có gì trong web.config trỏ đến một phiên bản cụ thể.Xung đột hội đồng trong Newtonsoft.Json

System.IO.FileLoadException: Không thể tải tập tin hoặc lắp ráp 'Newtonsoft.Json, Version = 3.5.0.0, Culture = trung tính, PublicKeyToken = 30ad4fe6b2a6aeed' hoặc một trong các phụ thuộc của nó. Định dạng tệp kê khai của assembly lắp ráp không khớp với tham chiếu assembly . (Ngoại lệ từ HRESULT: 0x80131040)

GAC sẽ nhập hai phiên bản của công việc lắp ráp để giải quyết vấn đề?

Trả lời

3

GACing chúng có thể hoạt động nhưng nó sẽ tạo ra một cơn ác mộng bảo trì. Đừng làm thế!

Tôi nghĩ rằng bạn có 2 lựa chọn:

  1. Sử dụng phiên bản đi kèm với Sitecore đó sẽ phụ thuộc vào phiên bản của Sitecore bạn đang chạy.
  2. Để một phiên bản sitecore bị ảnh hưởng và sử dụng ilmerge để kết hợp phiên bản Newtonsoft.Json bạn cần với bản lắp ráp của riêng bạn.

Tôi muốn giới thiệu 1 nếu bạn không cần bất kỳ tính năng mới nhất của thư viện như (động lực học ... vv)

+0

là nó không thể chuyển hướng các phiên bản lắp ráp? Tôi không biết những gì có hiệu lực (nếu có) nó sẽ có trên Sitecore mặc dù ... http://msdn.microsoft.com/en-us/library/7wd6ex19.aspx – jammykam

+0

Bạn có thể thử nhưng cả hai phiên bản của lắp ráp cần để có cùng một mã thông báo công khai. Tôi không chắc đó là trường hợp. Ngoài ra bạn cần phải xem xét rằng sitecore được thử nghiệm với các phiên bản cũ hơn và các phiên bản mới hơn của Json.net đã phá vỡ những thay đổi để bạn có khả năng có thể phá vỡ một cái gì đó là sitecore bằng cách chuyển hướng lắp ráp như @ jammykam đề cập. – marto

17

Như @jammykam commented trong câu trả lời Marto của bạn có thể chuyển hướng lắp ráp. Tôi đã làm điều này trong quá khứ với Newtonsoft và Sitecore mà không có vấn đề gì. Bạn có thể xem Sitecore Content as Service code nơi tôi có nó hoạt động.

Bạn đang đặc biệt quan tâm đến những dòng này trong file web.config: https://github.com/HedgehogDevelopment/sitecore-content-service/blob/master/Sitecore/Web/Web.config#L3499

<dependentAssembly> 
    <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" /> 
    <bindingRedirect oldVersion="0.0.0.0-4.0.8.0" newVersion="4.5.0.0" /> 
</dependentAssembly> 
+0

điều này đã lưu buổi chiều của tôi, cảm ơn bạn! –

+0

Cảm ơn @ Sean-Kearney. Tệp web.config của bạn đã lưu chúng tôi từ dll địa ngục. – Ben

+0

Cũng rõ ràng là ngược lại của công trình này quá, nếu bạn cần phải hạ cấp đó là trong trường hợp của tôi ... oldVersion = "0.0.0.0-6.0.0.0" newVersion = "4.5.0.0" –