2012-07-11 40 views
5

Tôi đang chơi với dự án mvc của mình.Tham khảo các phiên bản khác nhau của Json.NET dll

  1. Tôi đã gói một gói có tên là SocialAuth.Net vào dự án, lần lượt sử dụng Newtonsoft.Json.dll 4.0.0.0 (cũ) là một trong những phụ thuộc của nó.

  2. Sau đó, vì tôi cũng cần Json.Net, tôi muốn có phiên bản mới hơn, So I Nugeted Json.NET, phiên bản mới hơn 4.5.0.0 (mới hơn).

Sau đó, sự cố xảy ra. Theo quan điểm của tôi dao cạo "ViewBag.Title = ...." nó đã gạch dưới màu đỏ nói:

Warning 1 c:\users\admin\documents\visual studio 2010\Projects\WebApp\WebApp\Views\Home\Index.cshtml: ASP.NET runtime error: Could not load file or assembly 'Newtonsoft.Json, Version=4.5.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)

Đây là phần Json của web.config của tôi:

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

Vì vậy,

  1. Tôi đã đi đến Tài liệu tham khảo, kiểm tra và tìm thấy Newtonsoft.Json là 4.0.0.0 (có thể đến với SocialAuth.Net), và tôi đã xóa nó, và thêm tham chiếu 4.5.0.0 tôi nhận được từ Nuget.

  2. Tôi truy cập vào WebApp/bin/debug/folder và xóa mọi thứ, sau đó xây dựng lại dự án.

Tuy nhiên, khi tôi xây dựng lại ứng dụng web, Newton.Json 4.0.0.0 trở lại vào bin/debug/bất kể cách tôi tham chiếu thủ công đến Nuget 4.5.0.0 mới. và cùng một lỗi xảy ra. Tôi bị mắc kẹt.

Bạn có và biết cách giải quyết vấn đề dll này không? Cảm ơn bạn.

CHỈNH SỬA -----------------------------------

Sau một chút suy nghĩ, Tôi hiểu nó là bởi vì Json.Net đầu tiên (4.5 mới hơn) được liên kết đầu tiên, sau đó cái cũ hơn đến sau nó khi xây dựng. Vì vậy, cái cũ sẽ ghi đè lên cái mới hơn.

Tôi không quen với cài đặt GAC, nhưng biết rằng tôi có thể mở sâu và cài đặt 2 phiên bản ở đó, mà tôi không muốn, vì điều đó có nghĩa là tôi phải làm điều đó với mọi máy tôi triển khai trên web ứng dụng. Có cách nào để chơi với web.config và nhận được xung quanh này?

+0

oldVersion = "0.0.0.0-4.5.0.0" phải cũVersion = "0.0.0.0-4.0.0.0" – user516883

Trả lời

0

Bạn có thể thử cài đặt gói SocialAuth.Net với cờ ‑IgnoreDependencies, sau đó cài đặt các phụ thuộc theo cách thủ công và đảm bảo rằng bạn chỉ cài đặt phiên bản mới nhất của thư viện Json.Net.

Sau đó, khi chạy gói SocialAuth.Net sẽ tôn trọng chuyển hướng lắp ráp và tải Json.Net (v4.5) thay vì phiên bản cũ.

+0

Đã thử nghiệm nó ngay bây giờ. Lệnh "-IgnoreDependencies" dường như không làm gì với gói. Nó chỉ ghi đè lên phiên bản mới Json.Net 4.5 với 4.0 của nó anyway. – Tom

+1

Bạn có gỡ cài đặt các gói được đề cập trước không? Nếu có thể, hãy gỡ cài đặt tất cả các gói trước và sau đó cài đặt lại chúng bằng công tắc. Tôi không bao giờ sử dụng mà đặc biệt là chuyển đổi bản thân mình, nhưng từ các tài liệu nó không nên làm những gì bạn mô tả. –

+0

Tôi đã bắt đầu lại từ đầu. Đã xác nhận rằng SocialAuth.Net đã bỏ qua lệnh "-IgnoreDependencies", mang các phụ thuộc của riêng nó với một bản tải xuống mới. Sau đó ghi đè phụ thuộc mới hơn của tôi với những người phụ thuộc cũ. là Json.Net và log4net .... Cũng lưu ý rằng nếu tôi đi giao diện người quản lý Nuget và kiểm tra SocialAuth.Net phụ thuộc theo mô tả của nó, nó nói "null". Có thể SocialAuth.Net không liên kết các phụ thuộc của nó với Nuget và/hoặc làm việc với nó bằng cách nào đó không? – Tom

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