Не удалось загрузить файл или сборку «System.Net.Http.Formatting» или одну из ее зависимостей. Система не может найти указанный путь


158

У меня есть небольшое приложение MVC, которое я использую по практическим соображениям, но теперь я каждый раз сталкиваюсь с ошибкой при попытке отладки:

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

Я погуглил, но не могу найти решение. Я использую .NET 4.5.

Это не может быть файл DLL, потому что я использую .Net 4.5.


1
смотрите здесь зависимость .. nuget.org/packages/System.Net.Http.Formatting
Вишал Шарма

Я попробовал это, и это не сработало ... Вместо этого я получаю сообщение об ошибке в диспетчере пакетов, в котором говорится «NuGetCmdletUnhandledException, NuGet.PowerShell.Commands.InstallPackageCommand»
Norris

Ответы:


185

Всякий раз, когда у меня появляется ошибка NuGet, подобная этой, я обычно предпринимаю следующие шаги:

  1. Перейдите в папку пакетов в проводнике Windows и удалите ее.
  2. Откройте Visual Studio и выберите « Инструменты» > « Диспетчер пакетов библиотеки» > « Настройки диспетчера пакетов». В левой части пункта «Диспетчер пакетов» есть кнопка «Очистить кэш пакета». Нажмите эту кнопку и убедитесь, что флажок «Разрешить NuGet загружать отсутствующие пакеты во время сборки» установлен.
  3. Чистый раствор
  4. Затем щелкните правой кнопкой мыши решение в обозревателе решений и включите восстановление пакета NuGet.
  5. Постройте решение
  6. Перезапустите Visual Studio

Выполнение всех этих шагов почти всегда восстанавливает все пакеты и DLL, которые мне нужны для моей программы MVC.


РЕДАКТИРОВАТЬ >>>

Для Visual Studio 2013 и выше, шаг 2) должен гласить:

  1. Откройте Visual Studio и выберите « Инструменты» > « Параметры» > « Диспетчер пакетов NuGet». Справа находится кнопка «Очистить кэш пакета». Нажмите эту кнопку и убедитесь, что установлены флажки «Разрешить NuGet загружать отсутствующие пакеты» и «Автоматически проверять отсутствующие пакеты во время сборки в Visual Studio».

7
Это сработало ... Решил проблему ... Спасибо Jordan_Walters ... Мне не хватает представителя, чтобы проголосовать ... в противном случае ваша помощь будет высоко оценена
Norris

10
Хороший совет, но он не устранил мою проблему с «Не удалось загрузить файл или сборку« System.Net.Http.Formatting »или одну из ее зависимостей. Система не может найти указанный путь». Для меня я должен был пойти в Инструменты / Диспетчер пакетов NuGet / Консоль диспетчера пакетов и затем "Обновить-пакет -Проектное имя MyProject -reinstall". Все исправлено!
GeoMac

3
@YuraZaletskyy Я думаю, что это в $ {SolutionDir} / packages /. Т.е. корневая папка решения.
jakejgordon

1
Отличные советы, спасибо, они действительно помогли мне. Надеюсь, вы не возражаете, что я добавил дополнительную информацию, чтобы отразить более поздние версии Visual Studio.
Шеридан

1
Я следовал вышеупомянутому, и все же ошибка осталась - я вручную посмотрел на версию dll, и когда я проверил свой файл web.config, там были повторяющиеся записи, просто оставьте одну запись, чтобы соответствовать вашей версии dll, и все должно работать - это помогло мне
JazziJeff

168
  • Удалить все ссылки на код System.Net.*

  • в окне пакета,

    Install-Package Microsoft.AspNet.WebApi.Client

  • Очистить и восстановить ваш проект


2
Я только столкнулся с этой проблемой, и я установил последнюю версию пакета NuGet Microsoft.AspNet.WebApi.Client, а затем я увидел System.Net.Http.Formatting в моем списке ссылок.
ewomack

Я попробовал все остальное. Это единственный, который работал на меня.
Тимоти Кански

Работал на меня. Убедитесь, что вы установили правильную версию.
CrusherJoe

1
Это решение работает после того, как я обновил мой Web.Config bindingRedirectдля System.Net.Http.Formattingи System.Web.Httpк новой установленной предыдущей командой ... т.е. пошел от <bindingRedirect oldVersion="0.0.0.0-5.2.3.0" newVersion="5.2.3.0"/>до<bindingRedirect oldVersion="0.0.0.0-4.0.30319" newVersion="4.0.30319"/>
Serj Саган

Значит ли это, что многие из нас просто упускали пакет NuGet для Microsoft.AspNet.WebApi.Client?
carlin.scott

27

Я нашел лишний

  <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>

в моем web.config. убрал это чтобы заставить его работать. некоторый другой пакет, который я установил, а затем удалил, вызвал проблему.


откуда вы знаете, что публичный токен версии? b03f5f7f11d50a3a
Эран Отзап

Он автоматически добавляется консольной командой менеджера пакетов: Add-BindingRedirect *
Саймон Хьюз,

18

user3919888 указал мне правильное направление, но мне нужно было запустить Update-Package -reinstall Microsoft.AspNet.WebApi.Clientконсоль Package-Manager. Сама базовая установка не распознает проблему, но распознает, что пакет уже установлен, и не перезаписывает его.

Я отправляю этот ответ, потому что это случается так редко, что я в конечном итоге гуглю и попадаю на эту страницу, прежде чем вспоминаю, что делал в прошлый раз.


16

Удаление следующих строк из web.configрешенной моей проблемы. Обратите внимание, что в этом проекте я не использовал компоненты WebApi. Поэтому для других это решение может работать не так, как ожидалось.

  <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>

откуда вы знаете, что публичный токен версии?
Эран Отзап

Как я знаю, это публичный токен всех библиотек Microsoft, независимо от их версии.
Махмуд Моравей

Чтобы быть смешным, я добавил эти строки, и это помогло.
Кшиштоф Мадей,

Это решило проблему и для меня.
Вишал

Это решило и мою проблему. Я преобразовал старый проект веб-сайта в веб-приложение. Файл Web.config ссылался на версию 5.2.7, а установленный пакет NuGet был 5.2.3. Удаление этого из Web.config исправило ошибку.
Цезарь Даниил

9

Для тех, кто использует проект .NET Standard в сочетании с проектами .NET Framework :

Стандартным способом .NET пакеты, включенные в проект .NET Standard, будут правильно использоваться в других проектах .NET Core и .NET Standard.

Я имею в виду .NET Framework, если вы ссылаетесь на проект .NET Standard из проекта .NET Framework (MVC), вам необходимо вручную загрузить и установить те же пакеты nuget.

Таким образом, ответ на мой вопрос состоял в том, что мне пришлось загрузить и установить Microsoft.AspNet.WebApi.Clientв веб-проекте (.NET Framework), который использует проект .NET Standard, где Microsoft.AspNet.WebApi.Clientэто необходимо. На самом деле, я уже установил это, но была разница в версии.

Я просто добавляю этот ответ, чтобы другие могли видеть, что он может не отвечать непосредственно на вопрос OP, но он действительно сэкономил мне время, сначала проверив это, вместо того чтобы делать ответы с наибольшим количеством голосов.


1
Я использую .NET Core и нашел руководство по издевке над HttpClient на gingter.org/2018/07/26/… . После того, как это руководство дало мне проблему, описанную в вопросе OP. И вы решением проблемы
решили

Это то, что сработало для меня. Попробовал рекомендуемый подход, удалив и восстановив все пакеты, но в конце концов мне пришлось использовать Nuget для установки Microsoft.AspNet.WebApi.Client, чтобы убедиться, что это именно та версия, которая мне нужна, и все было хорошо после этого,
TH Todorov

Отличный ответ - я начинал думать, что мне нужно все вернуть обратно в Framework!
д219

6
  1. Удалить все ссылки на код System.Net.*
  2. Деинсталляция: пакет Microsoft.AspNet.WebApiи его зависимости.
  3. Переустановите все: пакет Microsoft.AspNet.WebApiи его зависимости.
  4. Очистить и восстановить ваш проект

Спасибо! Вы спасли меня после 2 дней отчаянных попыток. Это почти сводило меня с ума.
Марек Дорда

5

Как первоначально было предложено в комментарии GeoMac и задокументировано в документации NuGet, для меня не помогло следующее, когда ни один из других ответов не сработал:

Инструменты / Диспетчер пакетов NuGet / Консоль диспетчера пакетов

Update-Package -ProjectName MyProjectName -reinstall

У меня Visual Studio 2015. Это то, что я должен был сделать, исправить это мгновенно.
Дамиан С

3

В моем случае ни одно из вышеуказанных решений не сработало. Я решил, щелкнув правой кнопкой мыши на ссылку

System.Net.Http.Formatting

из Visual studio и установив для свойства Copy Local значение true .

Я надеюсь, что это полезно как-то.


2
Я сделал это, и это все еще происходит
Эран Отзап

2

Что решило эту досадную ошибку для меня, так это просто закрыть Visual Studio и открыть ее снова. Затем пересоберите решение, и все снова заработало. Извините за дерьмовый ответ, но я думаю, что он стоит ответа, потому что он решил его для меня.


1
Это было все, что потребовалось для меня тоже
Стив Вермейлен

1

Для меня это было так просто, как

  1. Удалить Microsoft.AspNet.WebApi.Clientиз папки пакетов в проводнике Windows
  2. Откройте Инструменты> Диспетчер пакетов NuGet> Консоль диспетчера пакетов
  3. Нажмите кнопку «Восстановить»


1

Я столкнулся с той же проблемой, потому что

System.Net.Http.Formatting

Версия, написанная внутри webconfig, была 5.0.3, но внутри папки bin библиотека dll System.Net.Http.Formatting была 4.0.2.

так что я просто заменил на тот же, заданный внутри бен

введите описание изображения здесь

введите описание изображения здесь

просто сделайте этот чистый проект и постройте


0

Возможно, вам нужно установить ссылку на библиотеку как «Копировать локально = True» в диалоговом окне свойств. В Visual Studio нажмите «ссылки», затем щелкните правой кнопкой мыши на отсутствующей ссылке, в контекстном меню выберите «Свойства», вы должны увидеть локальные настройки копирования.


0

Для меня добавление нескольких ниже строки в WebApi.config работает, так как после обновления новый пакет nuget не работает

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

Не забудьте добавить пространство имен:

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

Обязательно проверьте зависимость проекта, щелкнув правой кнопкой мыши файл решения, а затем в общих свойствах -> зависимости проекта проверьте проект, в котором
выдается

0

Что я сделал, чтобы решить эту проблему

  1. Зайдите в менеджер пакетов NuGet.

  2. Выберите Обновления (на левой панели)

  3. Обновление компонентов WebApi

  4. После этого проект запустился без ошибок.


0

VS2019: Инструменты -> Диспетчер пакетов Nuget -> Настройка диспетчера пакетов -> в разделе Восстановление пакетов, отметьте 2 варианта. После этого перейдите в папку пакетов проекта и удалите все дочерние папки внутри (чтобы больше не было ошибок). Затем перестройте решение, Nuget снова загрузит все пакеты, и проект должен запуститься без каких-либо ссылок.


0

У меня была проблема с проектом ASP.NET в VS 2019.

Другим симптомом было то, что некоторые ссылки (System.Web.Http) были отмечены как неисправные в списке ссылок проекта (Solution Explorer)

Мое решение:

  1. Удалите ошибочные ссылки в Project -> References (щелкните правой кнопкой мыши, ...)
  2. Сложение
  3. Перейдите к ошибкам сборки «Не удалось найти тип или имя пространства имен [...]» или подобное
  4. Используйте «Показать возможные исправления» -> Установить пакет

Причина:

Глядя на разницу в файле csproj, я понял причину проблемы. Кто-то сумел ссылаться на DLL в папке с программным файлом 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>
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.