Không thể tải tệp hoặc lắp ráp System.Net.Http, Version = 4.0.0.0 với ASP.NET (MVC 4) Web API OData Prerelease


81

Vấn đề

Sau khi cài đặt gói Microsoft ASP.NET Web API OData 5.0.0-rc1, vui lòng kết thúc với ngoại lệ sau:

Không thể tải tệp hoặc lắp ráp 'System.Web.Http, Phiên bản = 4.0.0.0, Văn hóa = trung lập, PublicKeyToken = 31bf3856ad364e35' hoặc một trong các phụ thuộc của nó. Định nghĩa tệp kê khai của hội đồng định vị không khớp với tham chiếu hợp ngữ. (Ngoại lệ từ HRESULT: 0x80131040)

Dự án MVC 4 của tôi là hoàn toàn mới và thực sự nhỏ, không có gì lạ mắt trong đó. Tôi nhắm mục tiêu .NET framework 4.5

Tôi cần gói nuget này để triển khai PATCH bằng cách sử dụng lớp Delta (Khi tôi sử dụng phiên bản 4.0.0.0 của gói, lớp Delta không hoạt động).

Lam sao tôi co thể sửa no?

Các phiên bản System.Web.Http của tôi

Trong GAC, tôi có phiên bản 5.0.0.0 của System.Web.Http

gacutil -l System.Web.Http Global Assembly Cache chứa các tập hợp sau: System.Web.Http, Version = 5.0.0.0, Culture = neutral, PublicKeyToken = 31bf3856ad364e35, processorArchitecture = MSIL

Trong Visual Studio , khi tôi duyệt các hội đồng, phiên bản System.Web.Http đã cho là 4.0.0.0 (Tại sao?)

Trong dự án của tôi , tham chiếu đến System.Web.Http

  • Có phiên bản 5.0.0.0
  • Trỏ đến thư mục \ lib \ net45 \ của gói
  • Có CopyLocal = true

Những điều tôi đã thử

Tôi đã cố gắng liên kết chuyển hướng v 4.0.0.0 đến 5.0.0.0 trong Web.config

<dependentAssembly>
    <assemblyIdentity name="System.Web.Http" publicKeyToken="31bf3856ad364e35" culture="neutral" />
    <bindingRedirect oldVersion="4.0.0.0-4.0.0.0" newVersion="5.0.0.0" />
</dependentAssembly>

Nhưng nó cho tôi một ngoại lệ khác:

Cố gắng bằng phương pháp 'System.Web.Http.GlobalConfiguration..cctor ()' để truy cập trường 'System.Web.Http.GlobalConfiguration.CS $ <> 9__CachedAnonymousMethodDelegate2' không thành công.

Tôi đoán rằng v 4.0.0.0 thực sự cần được sử dụng bởi công cụ Web Api cốt lõi.

Các câu hỏi được liên kết

Lỗi phân tích mã Không thể tải tệp hoặc lắp ráp 'System.Net.Http, Phiên bản = 2.0.0.0 trong API Web MVC4 Không thể tải tệp hoặc lắp ráp' System.Net.Http, Phiên bản = 2.0.0.0 trong API Web MVC4


1
Có thể câu trả lời này có thể giúp bạn: stackoverflow.com/a/18700279/795876
fsenart

Câu trả lời:


164

Visual Studio 2013 có một tính năng mới để giải quyết vấn đề này. Khi bạn xây dựng ứng dụng, bạn sẽ thấy cảnh báo về các phiên bản khác nhau của một assembly đang được tham chiếu. Nhấp đúp vào cảnh báo để thêm chuyển hướng liên kết lắp ráp đến web.config.

Xem http://msdn.microsoft.com/en-us/library/2fc472t2.aspx để biết thêm chi tiết.

jeff.eynon lưu ý dưới đây rằng bạn cần kiểm tra web.config (nếu sử dụng điều khiển nguồn TFS) để VS tự động chỉnh sửa tệp. Cảm ơn vì tiền hỗ trợ!


7
Tôi ước tôi có thể ủng hộ điều này 10 lần. Có VS tự động làm điều này thật tuyệt. Cảm ơn vì tiền boa!
Bob Horn

4
Thật không may, nó không phải lúc nào cũng hoạt động. Trên thực tế, tôi muốn nói thường xuyên hơn là không, nhấp đúp vào cảnh báo này không có tác dụng gì.
Trevor de Koekkoek

3
Bạn phải kiểm tra cấu hình web / ứng dụng đang được sửa đổi. Vì bất kỳ lý do gì VS dường như không sẵn sàng kiểm tra tệp cho bạn trong trường hợp này.
jeff.eynon

39

Tôi đã làm cho nó hoạt động bằng cách nâng cấp gói WebApi lên phiên bản phát hành trước bằng cách sử dụng nuget:

PM> Microsoft.AspNet.WebApi -Pre

Để buộc dự án sử dụng phiên bản WebApi mới nhất, cần phải có một số sửa đổi đối với Web.config gốc:

1) Phiên bản trang web từ 2.0.0.0 đến 3.0.0.0

<appSettings>
    <add key="webpages:Version" value="3.0.0.0" />
</appSettings>

2) Ràng buộc chuyển hướng đến 5.0.0.0 cho System.Web.Http và System.Net.Http.Formatting

<dependentAssembly>
    <assemblyIdentity name="System.Web.Http" publicKeyToken="31bf3856ad364e35" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-5.0.0.0" newVersion="5.0.0.0" />
</dependentAssembly>
<dependentAssembly>
    <assemblyIdentity name="System.Net.Http.Formatting" publicKeyToken="31bf3856ad364e35" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-5.0.0.0" newVersion="5.0.0.0" />
</dependentAssembly>

Tôi nghĩ đó là nó

Tái bút: Giải pháp lấy cảm hứng từ WebAPI OData 5.0 Beta - Truy cập GlobalConfiguration ném ra Lỗi bảo mật


3
điều này đã làm việc cho tôi - Tôi gặp phải vấn đề tương tự khi cài đặt gói api web CORS mới nhất vì sự phụ thuộc system.net.http được cập nhật.
sandeep talabathula

1
bạn rock man, cảm ơn rất nhiều. Trong trường hợp của tôi, cấu hình web không được cập nhật bằng cách khôi phục nuget, tôi đã làm điều đó theo cách thủ công sau khi triển khai.
Leandro

Tương tự như vậy, điều này nhận được +1 vì khi VS không làm điều này cho bạn, bạn cần câu trả lời này để có thể tự làm cho ràng buộc hoạt động.
Michael Blackburn

11

Tôi đã gặp vấn đề tương tự và tôi đã giải quyết nó bằng cách đặt CopyLocal thành true cho các lib sau:

System.Web.Http.dll
System.Web.Http.WebHost.dll
System.Net.Http.Formatting.dll

Tôi phải nói thêm rằng tôi sử dụng MVC4 và NET 4


1
điều này cũng giải quyết nó cho tôi - tuy nhiên, tôi thực sự muốn biết điều này thực sự có nghĩa là gì?
serup

11

Tôi đã gặp phải sự cố này khi cố gắng cập nhật Dự án khăn nóng từ mẫu dự án và khi tôi tạo một dự án trống và cài đặt HotTowel qua nuget trong VS 2012 kể từ ngày 23/10/2013.

Để khắc phục, tôi đã cập nhật qua Nuget the Web Api Web Host và các gói API Web lên 5.0, phiên bản hiện tại trong NuGet vào lúc này (23/10/2013).

Sau đó, tôi đã thêm các chỉ dẫn ràng buộc:

<dependentAssembly>
  <assemblyIdentity name="System.Web.Http" publicKeyToken="31bf3856ad364e35" culture="neutral" />
  <bindingRedirect oldVersion="0.0.0.0-5.0.0.0" newVersion="5.0.0.0" />
</dependentAssembly>
<dependentAssembly>
  <assemblyIdentity name="System.Net.Http.Formatting" publicKeyToken="31bf3856ad364e35" culture="neutral" />
  <bindingRedirect oldVersion="0.0.0.0-5.0.0.0" newVersion="5.0.0.0" />
</dependentAssembly>

8

Hoặc bạn có thể thực hiện việc này từ Bảng điều khiển Trình quản lý Gói NuGet

 Install-Package Microsoft.AspNet.WebApi -Version 5.0.0

Và sau đó, bạn sẽ có thể thêm tham chiếu vào System.Web.Http.WebHost 5.0


4

Loại bỏ System.Web.Http và System.Net.Http.Formatting khỏi các tham chiếu của bạn và Thêm lại các tham chiếu vào bằng cách duyệt đến thư mục bin của bạn (nơi chúng được sao chép bởi nuget) Bây giờ, phiên bản tệp cho biết là 5.0.0.0


1

Lỗi này xuất hiện nhiều lần trên một số dự án khác nhau.

Điều cuối cùng tôi đã tìm ra là khi tôi xây dựng, đã có một bản sao của cụm nhị phân system.web.mvc trong thư mục bin của tôi.

Để khắc phục điều này, hãy nhấp chuột phải vào assembly trong danh sách tham chiếu và chọn "thuộc tính". Kiểm tra xem đây có phải là phiên bản mới nhất hay không bằng cách xem thuộc tính "Phiên bản". Nếu đúng như vậy, hãy chuyển "Copy Local" thành true.

Điều này sẽ đảm bảo rằng phiên bản được tham chiếu trong dự án của bạn là phiên bản sẽ kết thúc trong thư mục nhị phân của bạn.

Nếu bạn vẫn gặp lỗi, hãy thử chạy nuGet để tải phiên bản mới nhất, sau đó thử lại phần đã nói ở trên.

Chúc may mắn - lỗi này là một nỗi đau!


1

Tôi phải đối mặt với cùng một lỗi. Khi tôi cài đặt Unity Framework cho Dependency Injection, các tham chiếu mới của Http và HttpFormatter đã được thêm vào cấu hình của tôi. Vì vậy, đây là các bước tôi đã làm theo.

Tôi đã chạy lệnh sau trên nuGet Package Manager Console: PM> Install-Package Microsoft.ASPNet.WebAPI -pre

Và đã thêm tham chiếu vật lý vào dll với phiên bản 5.0


1

tôi giải quyết bằng cách nuget. lần đầu tiên bạn cài đặt nuget. thứ hai bạn sử dụng.
minh họa theo:

thứ ba: Kiểm tra xem đây có phải là phiên bản mới nhất hay không bằng cách xem thuộc tính "Phiên bản".

The finaly: bạn kiểm tra lại dự án có phiên bản mới nhất.


0

Tôi đã gặp phải cùng một loại vấn đề và đã làm theo các bước dưới đây để giải quyết vấn đề

Đi tới Công cụ -> Trình quản lý Gói Thư viện -> Bảng điều khiển Trình quản lý Gói và chạy lệnh dưới đây

Cài đặt-Gói Microsoft.ASPNet.WebAPI -pre


0

Sau khi sửa đổi Tài liệu tham khảo trong Web.config tệp như đã đề cập ở trên, chúng tôi đã giải quyết các tài liệu tham khảo.

Tôi đã phải đối mặt với vấn đề tương tự.

Đối với chúng tôi, chúng tôi có tham khảo Microsoft.Data.Edm.dllOData.dllvà hội đồng khác từ Program Files:

C:\Program Files (x86)\Microsoft WCF Data Services\5.0
                          \bin\.NETFramework\Microsoft.Data.Edm.dll

C:\Program Files (x86)\Microsoft WCF Data Services\5.0
                        \bin\.NETFramework\Microsoft.Data.OData.dll

và phiên bản là 5.6.4 .

Sau khi tôi thay đổi tham chiếu của cả hai hội đồng thành C:\....Project\packages\Microsoft.Data.Edm.5.6.0, sự cố đã được giải quyết


0

Đã đi vào trình quản lý gói nuget và cập nhật các gói của tôi. Bây giờ nó hoạt động. Cái chính mà tôi đã cập nhật là Microsoft.AspNet.WebApi.Core. Có thể cần phải làm điều này với cả hai dự án để đồng bộ hóa các tham chiếu thích hợp.


0

Nếu sự cố này xảy ra, vui lòng kiểm tra web.config trong phần bên dưới

Phần dưới đây cung cấp phiên bản của dll cụ thể được sử dụng

sau khi kiểm tra phần này trong web.config, hãy mở trình khám phá giải pháp và chọn tham chiếu từ cây dự án như được hiển thị. Giải pháp Explorer-> Tham khảo

Sau khi mở rộng tham chiếu, hãy tìm dll gây ra lỗi. Nhấp chuột phải vào tham chiếu dll và kiểm tra phiên bản như thể hiện trong hình trên.

Nếu cả phiên bản dll cấu hình và dll được tham chiếu khác nhau, bạn sẽ nhận được ngoại lệ này. Đảm bảo rằng cả hai đều có cùng một phiên bản sẽ hữu ích.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.