2012-06-26 16 views
10

Câu hỏi đặt ra là cách giải quyết xung đột giữa các phiên bản của assembly trong dự án đã được nâng cấp lên MVC4 và EF5?Tìm thấy xung đột giữa các phiên bản khác nhau của cùng một assembly phụ thuộc.MVC3 -> MVC4/EF4 -> EF5

Vấn đề là biểu hiện trong thực tế là các bộ điều khiển và mô hình của tôi có thể bao gồm System.Data.Objects, nhưng giờ là quan điểm của tôi.

Tôi đang sử dụng MVC 4, dự án của tôi được nâng cấp từ MVC 3.

Entity Framework là phiên bản 5.

Tôi có một bộ điều khiển có khả năng sử dụng ObjectContext từ System.Data.Objects.

Sử dụng của tôi: using System.Data.Objects; sử dụng System.Data.Entity;

Khi tôi cố gắng bao gồm sử dụng trong System.Data.Objects nhìn hình thức, tôi nhận được:

CS0234: Loại hoặc namespace tên 'đối tượng' không tồn tại trong không gian tên 'System.Data' (bạn đang thiếu một tài liệu tham khảo lắp ráp)

tôi đang nhắm mục tiêu .net 4.5

Hiển thị Build My nhắn này: C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ Microsoft.Common.targets (1561,5): cảnh báo MSB3247: Tìm thấy xung đột giữa các phiên bản khác nhau của cùng một hội đồng phụ thuộc.

+1

Tôi không hoàn toàn chắc chắn vấn đề của bạn là gì nhưng tôi đoán câu hỏi đầu tiên của tôi sẽ là có anyway bạn có thể tránh tương tác với objectcontext từ xem?Đây thường là một ý tưởng tồi và vi phạm các quy tắc của chế độ xem của bạn là "câm" trong mẫu mvc. Bạn nên tránh bất kỳ điều gì khác ngoài logic hiển thị cụ thể trong chế độ xem của bạn. Trên một mặt lưu ý, bạn có thể đăng xem (hoặc một phần của nó) để tôi có thể hiểu rõ hơn về vấn đề của bạn không? – theMothaShip

+0

Đây là những gì tôi đang cố gắng thực hiện trong View: @ ObjectContext.GetObjectType (item.TimelineEntry.Document.GetType()). Name.ToString(); –

+0

Vì vậy, những gì có thể xảy ra là một số lắp ráp khác mà bạn đã tham chiếu trong dự án của bạn là tham chiếu một phiên bản khác của khung thực thể, do đó tại sao bạn nhận được thông báo trong màn hình xây dựng của bạn. Ứng dụng của bạn chỉ là một tệp Dự án hoặc có nhiều dự án trong cùng một giải pháp mà tất cả có thể hoặc không thể tham chiếu đến khung thực thể? – theMothaShip

Trả lời

3

Nếu bạn nhìn vào thông báo xây dựng, nó tuyên bố phiên bản 4.0 của khung .net được tham chiếu ... Có cài đặt trong tệp dự án của bạn hoặc web/app.config chỉ định phiên bản xung đột của khung .net ?

Bạn có quen thuộc với fuslog không? bạn có thể thiết lập để đăng nhập tất cả các ràng buộc lắp ráp mà .net đang làm trong khi chạy ứng dụng của bạn. Sau đó, bạn sẽ có thể xem thông tin chi tiết về những gì đang bị ràng buộc khi nào. Nếu bạn vẫn không thể hình dung ra, bạn luôn có thể thực hiện chuyển hướng ràng buộc trên .dll đó trong web.config.

http://msdn.microsoft.com/en-us/library/eftw1fys.aspx - Chuyển hướng ràng buộc

http://msdn.microsoft.com/en-us/library/e74a18c4(v=vs.71).aspx - fusion log xem

Thiết lập fusion logger và hãy nhìn vào những gì mà đầu ra là. Nếu bạn không nhận được câu trả lời từ đó, hãy thử chuyển hướng ràng buộc (mà sẽ cung cấp cho bạn ít nhất một giải pháp tạm thời).

+0

Tôi không chắc chắn làm thế nào để tìm hiểu những gì đang tham khảo những gì. Các thuộc tính của dự án đang tham chiếu .Net 4.5. Làm thế nào để tôi theo dõi điều này? Chỉ có một System.Data.Entity DLL trong tài liệu tham khảo. –

+0

Có vẻ như khung nhìn đang truy cập vào Phiên bản Entity Framework 5 của system.data.entity và bộ điều khiển đang truy cập phiên bản 4, có system.data.objects. Làm thế nào để tôi 1) chắc chắn rằng toàn bộ dự án đang sử dụng các hội đồng mới. 2) Nhận đối tượng ngữ cảnh trên phiên bản EF 5? –

+0

Thật lạ - mô hình cũng không có vấn đề gì khi truy cập vào objectcontext. –

28

Bạn có thể tạo giải pháp của mình ở chế độ chẩn đoán để nhận thông tin chi tiết hơn về lỗi.

Mở hộp thoại Tùy chọn VS (Công cụ> Tùy chọn), điều hướng đến nút "Dự án và giải pháp" và chọn "Xây dựng và chạy". Thay đổi độ dài đầu ra của dự án xây dựng MS Build thành Chẩn đoán.

Có giao diện here.

+0

Chế độ chẩn đoán cho bạn biết chính xác các dll nào cũng đang kéo trong các phiên bản khác. Rất hữu ích. – Laurence

+4

Chỉ cần một lưu ý, một khi bạn nhận được đầu ra xây dựng làm một tìm kiếm cho từ "xung đột" trong cửa sổ đầu ra và bạn sẽ tìm thấy vấn đề. –

0

Trong thư mục tôi đã xuất bản, có một thư mục có tên là aspnet_client. Tôi đã chuyển nó (thay vì xóa nó), được tái bản, và nó hoạt động. Tôi không chắc tại sao thư mục đó lại quyết định gây rắc rối cho tôi.

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