Không thể tải tệp hoặc lắp ráp 'System.Net.Http.Formatted' hoặc một trong các phụ thuộc của nó. Hệ thống không thể tìm đường dẫn cụ thể


158

Tôi có một ứng dụng MVC nhỏ mà tôi sử dụng vì lý do thực tế, nhưng bây giờ tôi gặp lỗi mỗi lần tôi cố gắng gỡ lỗi:

Could not load file or assembly 'System.Net.Http.Formatting' or one of its dependencies. 
The system cannot find the path specified.

Tôi đã googled nhưng không thể tìm thấy một giải pháp. Tôi đang sử dụng .NET 4.5.

Nó không thể là tệp DLL vì tôi đang sử dụng .Net 4.5.


1
xem sự phụ thuộc ở đây .. nuget.org/packages/System.Net.Http.Formatted
Vishal Sharma

Tôi đã thử điều đó và nó không hoạt động ... Thay vào đó tôi gặp lỗi trên Trình quản lý gói nói 'NuGetCmdletUnhandledException, NuGet.PowerShell.Commands.InstallPackageCommand'
Norris

Câu trả lời:


185

Bất cứ khi nào tôi gặp lỗi NuGet như vậy, tôi thường thực hiện các bước sau:

  1. Chuyển đến thư mục gói trong Windows Explorer và xóa nó.
  2. Mở Visual Studio và chuyển đến Công cụ > Trình quản lý gói thư viện > Cài đặt trình quản lý gói và bên dưới mục Trình quản lý gói ở phía bên trái có nút "Xóa bộ nhớ cache gói". Nhấp vào nút này và đảm bảo rằng hộp kiểm "Cho phép NuGet tải xuống các gói bị thiếu trong quá trình xây dựng" được chọn.
  3. Làm sạch dung dịch
  4. Sau đó nhấp chuột phải vào giải pháp trong Solution Explorer và bật NuGet Gói Khôi phục
  5. Xây dựng giải pháp
  6. Khởi động lại Visual Studio

Thực hiện tất cả các bước này hầu như luôn khôi phục tất cả các gói và dll tôi cần cho chương trình MVC của mình.


EDIT >>>

Đối với Visual Studio 2013 trở lên, bước 2) nên đọc:

  1. Mở Visual Studio và đi đến Công cụ > Tùy chọn > Trình quản lý gói NuGet và ở phía bên phải có "Nút Xóa bộ nhớ cache gói". Nhấp vào nút này và đảm bảo rằng các hộp kiểm cho "Cho phép NuGet tải xuống các gói bị thiếu" và "Tự động kiểm tra các gói bị thiếu trong quá trình xây dựng trong Visual Studio" đã được chọn.

7
Điều này đã hoạt động ... Đã giải quyết vấn đề ... Cảm ơn Jordan_Walters ... Tôi không có đủ Rep để bỏ phiếu ... nếu không thì sự giúp đỡ của bạn đã được đánh giá cao
Norris

10
Lời khuyên tốt nhưng nó không khắc phục được sự cố của tôi với "Không thể tải tệp hoặc lắp ráp 'System.Net.Http.Formatted' hoặc một trong các phụ thuộc của nó. Hệ thống không thể tìm thấy đường dẫn được chỉ định". Đối với tôi, tôi đã phải truy cập Công cụ / Trình quản lý gói NuGet / Bảng điều khiển Trình quản lý gói và sau đó "Cập nhật-Gói -ProjectName MyProject -reinstall". Mọi thứ đã được sửa!
GeoMac

3
@YuraZaletskyy Tôi nghĩ rằng đó là trong $ {SolutionDir} / gói /. Tức là thư mục giải pháp gốc.
jakejgordon

1
Lời khuyên tuyệt vời, cảm ơn, họ thực sự đã giúp tôi. Tôi hy vọng bạn không bận tâm rằng tôi đã thêm một số thông tin để phản ánh các phiên bản sau của Visual Studio.
Sheridan

1
Tôi đã làm theo các lỗi ở trên và vẫn còn lỗi - tôi đã xem thủ công phiên bản dll và khi tôi kiểm tra tệp web.config của tôi có các mục trùng lặp, chỉ để lại một mục để khớp với phiên bản dll của bạn và mọi thứ sẽ hoạt động - nó đã làm cho tôi
JazziJeff

168
  • Xóa tất cả các tham chiếu mã đến System.Net.*

  • trong cửa sổ gói

    Install-Package Microsoft.AspNet.WebApi.Client

  • Làm sạch và xây dựng lại dự án của bạn


2
Tôi vừa gặp vấn đề này và tôi đã cài đặt phiên bản gói NuGet mới nhất của Microsoft.AspNet.WebApi.Client và sau đó tôi thấy System.Net.Http.Formatted trong danh sách tài liệu tham khảo của mình.
ewomack

Tôi đã thử mọi thứ khác. Đây là người duy nhất làm việc cho tôi.
Timothy Kanski

Đã làm cho tôi. Hãy chắc chắn rằng bạn cài đặt đúng phiên bản.
Máy nghiềnJoe

1
Giải pháp này làm việc sau khi tôi cập nhật của tôi Web.Config bindingRedirectcho System.Net.Http.FormattingSystem.Web.Httpđể cái mới được cài đặt bởi lệnh trên ... tức là nó đã đi từ <bindingRedirect oldVersion="0.0.0.0-5.2.3.0" newVersion="5.2.3.0"/>đến<bindingRedirect oldVersion="0.0.0.0-4.0.30319" newVersion="4.0.30319"/>
Serj Sagan

Có phải đó là trường hợp mà nhiều người trong chúng ta chỉ đơn giản là thiếu gói Microsoft.AspNet.WebApi.Client NuGet?
carlin.scott

27

Tôi tìm thấy thêm

  <dependentAssembly>
    <assemblyIdentity name="System.Net.Http" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-2.2.28.0" newVersion="2.2.28.0" />
  </dependentAssembly>

trong web.config của tôi. loại bỏ nó để làm cho nó hoạt động. Một số gói khác tôi đã cài đặt, và sau đó loại bỏ gây ra sự cố.


Làm thế nào để bạn biết mã thông báo công khai là gì của phiên bản? b03f5f7f11d50a3a
eran otzap

Nó được thêm tự động bởi lệnh bảng điều khiển trình quản lý gói: Add-BindingRedirect *
Simon Hughes

18

user3919888 chỉ cho tôi đi đúng hướng, nhưng tôi cần chạy Update-Package -reinstall Microsoft.AspNet.WebApi.Clienttrong bảng điều khiển Gói-Manager. Bản thân cài đặt cơ bản không nhận ra vấn đề nhưng không nhận ra rằng gói đã được cài đặt và không ghi đè lên nó.

Tôi đang đăng câu trả lời này bởi vì điều này xảy ra không thường xuyên đến nỗi tôi đã kết thúc và đến trang này trước khi tôi nhớ những gì tôi đã làm lần trước.


16

Loại bỏ các dòng sau khỏi web.configgiải quyết vấn đề của tôi. Lưu ý rằng trong dự án này tôi đã không sử dụng các thành phần WebApi. Vì vậy, đối với những người khác, giải pháp này có thể không hoạt động như mong đợi.

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

Làm thế nào để bạn biết mã thông báo công khai là gì của phiên bản?
eran otzap

Theo tôi biết, đó là mã thông báo công khai của tất cả các dll của Microsoft bất kể phiên bản của họ.
Mahmoud Moravej

Để được vui tôi đã thêm những dòng này và nó đã giúp.
Krzysztof Madej

Điều đó cũng khắc phục vấn đề cho tôi.
Vishal

Điều này cũng giải quyết vấn đề của tôi. Tôi đã chuyển đổi một dự án Trang web cũ thành Ứng dụng Web. Tệp Web.config đã tham chiếu phiên bản 5.2.7, trong khi gói NuGet được cài đặt là 5.2.3. Xóa cái này khỏi Web.config đã sửa lỗi.
Cesar Daniel

9

Đối với những người sử dụng dự án .NET Standard kết hợp với các dự án .NET Framework :

Theo cách .NET Standard, các gói được bao gồm trong dự án .NET Standard sẽ được sử dụng chính xác trong các dự án .NET Core và .NET Standard khác.

Theo cách của .NET Framework, nếu bạn đang tham khảo dự án .NET Standard từ dự án .NET Framework (MVC), bạn cần tải xuống và cài đặt thủ công các gói nuget tương tự.

Vì vậy, câu trả lời cho câu hỏi của tôi là tôi phải tải xuống và cài đặt Microsoft.AspNet.WebApi.Client trong dự án web (.NET Framework) đang sử dụng dự án .NET Standard khi Microsoft.AspNet.WebApi.Clientcần thiết. Trong thực tế, tôi đã cài đặt nó nhưng có một sự khác biệt về phiên bản.

Tôi chỉ thêm câu trả lời này cho người khác xem, nó có thể không trả lời trực tiếp câu hỏi của OP nhưng nó đã giúp tôi tiết kiệm thời gian bằng cách kiểm tra trước thay vì thực hiện các câu trả lời được bình chọn hàng đầu.


1
Tôi đang sử dụng .NET Core và tìm thấy một hướng dẫn để giả lập HTTPClient trên gingter.org/2018/07/26/ . Theo hướng dẫn đó đã cho tôi vấn đề được mô tả trong câu hỏi của OP. Và giải pháp của bạn đã khắc phục sự cố :)
Thorkil Værge 28/07/19

Đây là những gì làm việc cho tôi. Đã thử cách tiếp cận được đề xuất, xóa và khôi phục tất cả các gói, nhưng cuối cùng tôi đã phải sử dụng Nuget để cài đặt Microsoft.AspNet.WebApi.Client đảm bảo rằng đó là phiên bản tôi cần và tất cả đều tốt sau đó,
TH Todorov

Câu trả lời tuyệt vời - Tôi đã bắt đầu nghĩ rằng tôi cần chuyển mọi thứ trở lại Framework!
d219

6
  1. Xóa tất cả các tham chiếu mã đến System.Net.*
  2. Gỡ cài đặt: Gói Microsoft.AspNet.WebApivà các phụ thuộc của nó.
  3. Cài đặt lại tất cả: Gói Microsoft.AspNet.WebApivà phụ thuộc của nó.
  4. Làm sạch và xây dựng lại dự án của bạn

Cảm ơn bạn! Bạn đã cứu tôi sau 2 ngày cố gắng tuyệt vọng. Nó gần như làm tôi phát điên.
Marek Dorda

5

Như đề xuất ban đầu trong một nhận xét của GeoMac và được ghi lại trên các tài liệu của NuGet, những điều sau đây có hiệu quả với tôi khi không có câu trả lời nào khác hoạt động:

Công cụ / Trình quản lý gói NuGet / Bảng điều khiển quản lý gói

Update-Package -ProjectName MyProjectName -reinstall

Tôi có Visual Studio 2015. Đây là những gì tôi phải làm, sửa nó ngay lập tức.
Damian C

3

Trong trường hợp của tôi không có giải pháp nào ở trên hoạt động. Tôi đã giải quyết bằng cách nhấp chuột phải vào tài liệu tham khảo

System.Net.Http. Định dạng

từ Visual studio và thiết lập thuộc tính Copy Local thành true .

Tôi hy vọng điều này hữu ích bằng cách nào đó.


2
tôi đã làm điều đó và nó vẫn xảy ra
eran otzap

2

Điều đã giải quyết lỗi khó chịu này đối với tôi chỉ là đóng Visual Studio và mở lại. Sau đó xây dựng lại giải pháp, và tất cả đã hoạt động trở lại. Xin lỗi vì câu trả lời tào lao, nhưng tôi nghĩ nó đáng để trả lời vì nó đã giải quyết nó cho tôi.


1
Đây cũng là tất cả những gì tôi cần
Steve Vermeulen

1

Đối với tôi nó đơn giản như

  1. Xóa Microsoft.AspNet.WebApi.Clientkhỏi thư mục gói trong Windows Explorer
  2. Mở Công cụ> Trình quản lý gói NuGet> Bảng điều khiển Trình quản lý gói
  3. Nhấp vào nút "Khôi phục"

1

Trong trường hợp của tôi, không có cách nào ở trên hoạt động, tuy nhiên, thay thế 5.2.3.0 bằng 4.0.0.0 đã giải quyết được vấn đề.


1

Tôi đã phải đối mặt với cùng một vấn đề bởi vì

System.Net.Http. Định dạng

phiên bản được viết bên trong webconfig là 5.0.3 nhưng bên trong thư mục bin thư viện System.Net.Http.Formatted phiên bản dll là 4.0.2

Vì vậy, tôi chỉ thay thế với cùng một bên trong bin

nhập mô tả hình ảnh ở đây

nhập mô tả hình ảnh ở đây

chỉ cần làm dự án sạch này và xây dựng


0

Có lẽ bạn cần đặt tham chiếu thư viện là "Sao chép cục bộ = True" trên hộp thoại thuộc tính. Trên studio trực quan, nhấp vào "tài liệu tham khảo", sau đó nhấp chuột phải vào tài liệu tham khảo bị thiếu, từ thuộc tính nhấp vào menu ngữ cảnh, bạn sẽ thấy sao chép cài đặt cục bộ.


0

Đối với tôi, việc thêm một vài dòng dưới đây trong WebApi.config hoạt động như sau khi cập nhật gói nuget mới không hoạt động

var setting = config.Formatters.JsonFormatter.SerializerSettings;
setting.ContractResolver = new CamelCasePropertyNamesContractResolver();
setting.Formatting = Formatting.Indented;

Đừng quên thêm không gian tên:

using Newtonsoft.Json.Serialization; 
using Newtonsoft.Json;

vui lòng đảm bảo kiểm tra sự phụ thuộc của dự án bằng cách nhấp chuột phải vào tệp giải pháp và sau đó trong các thuộc tính chung-> phụ thuộc dự án kiểm tra dự án nơi lỗi được ném hoặc kiểm tra tên dự án dựa trên giải pháp
nào

0

Những gì tôi đã làm để giải quyết vấn đề này là

  1. Chuyển đến trình quản lý gói NuGet.

  2. Chọn Cập nhật (từ bảng điều khiển bên trái)

  3. Cập nhật các thành phần WebApi

  4. Sau đó, dự án chạy không có lỗi.


0

VS2019: Công cụ -> Trình quản lý gói Nuget -> Cài đặt trình quản lý gói -> trong phần Khôi phục gói, kiểm tra 2 tùy chọn. Sau đó, đi đến thư mục gói dự án và xóa tất cả các thư mục con bên trong (không còn lỗi nữa) Sau đó, giải pháp Rebuild, Nuget sẽ tải lại tất cả các gói và dự án sẽ chạy mà không cần tham khảo.


0

Tôi đã có vấn đề với một dự án ASP.NET trong VS 2019.

Một triệu chứng khác là, một số tài liệu tham khảo (System.Web.Http) đã bị đánh dấu là bị lỗi trong danh sách tài liệu tham khảo dự án (Solution Explorer)

Giải pháp của tôi:

  1. Xóa các tham chiếu bị lỗi trong Dự án -> Tài liệu tham khảo (nhấp chuột phải, ...)
  2. Xây dựng
  3. Điều hướng đến các lỗi xây dựng "Không thể tìm thấy tên loại hoặc không gian tên [...]" hoặc tương tự
  4. Sử dụng "Hiển thị các bản sửa lỗi tiềm năng" -> Cài đặt gói

Nguyên nhân:

Nhìn vào sự khác biệt trong tệp csproj tôi có thể thấy lý do của sự cố. Ai đó đã quản lý để tham chiếu một DLL trong thư mục tệp Chương trình Windows!

<Reference Include="System.Web.Http">
  <HintPath>..\..\..\..\..\..\Program Files (x86)\Microsoft ASP.NET\ASP.NET MVC 4\Packages\Microsoft.AspNet.WebApi.Core.4.0.30506.0\lib\net40\System.Web.Http.dll</HintPath>
</Reference>
<Reference Include="System.Web.Mvc, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
  <SpecificVersion>False</SpecificVersion>
  <HintPath>..\..\..\..\..\..\Program Files (x86)\Microsoft ASP.NET\ASP.NET MVC 4\Packages\Microsoft.AspNet.Mvc.4.0.30506.0\lib\net40\System.Web.Mvc.dll</HintPath>
</Reference>
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.