Проект Visual Studio 2012 Web API не запускается - не удается найти Newtonsoft.Json

После запуска чистого решения и восстановления мой проект MVC 4 Web API перестает работать. Он не может найти Newtonsoft.Json.

Я знаю, что MS использует это как сериализатор JSON по умолчанию, но его нет в списке ссылок для проекта, и я не могу добавить его из NuGet, поскольку он говорит, что он уже установлен.

Кто-нибудь знает здесь, что может быть неправильным?

Полная трассировка стека:

[FileNotFoundException: не удалось загрузить файл или сборку 'Newtonsoft.Json, Version = 4.5.0.0, Culture = neutral, PublicKeyToken = 30ad4fe6b2a6aeed 'или одна из его зависимостей. система не может найти указанный файл.]
MvcWebRole1.WebApiApplication.Application_Error() в d:\Data\Source Управляемая Проекты \georace\georace\Server\GeoRaceServer\MvcWebRole1\Global.asax.cs: 70

[HttpException (0x80004005): не удалось загрузить файл или сборку 'Newtonsoft.Json, Version = 4.5.0.0, Culture = neutral, PublicKeyToken = 30ad4fe6b2a6aeed 'или одна из его зависимостей. система не может найти указанный файл.]
System.Web.HttpApplicationFactory.EnsureAppStartCalledForIntegratedMode(HttpContext контекст, приложение HttpApplication) +12838633
System.Web.HttpApplication.RegisterEventSubscriptionsWithIIS(IntPtr appContext, контекст HttpContext, обработчики MethodInfo [] +175
System.Web.HttpApplication.InitSpecial(состояние HttpApplicationState, Обработчики MethodInfo [], IntPtr appContext, контекст HttpContext) +304
System.Web.HttpApplicationFactory.GetSpecialApplicationInstance(IntPtr контекст приложения, контекст HttpContext) +404
System.Web.Hosting.PipelineRuntime.InitializeApplication(IntPtr appContext) +475

[HttpException (0x80004005): не удалось загрузить файл или сборку 'Newtonsoft.Json, Version = 4.5.0.0, Culture = neutral, PublicKeyToken = 30ad4fe6b2a6aeed 'или одна из его зависимостей. система не может найти указанный файл.]
System.Web.HttpRuntime.FirstRequestInit(контекст HttpContext) +12851296 System.Web.HttpRuntime.EnsureFirstRequestInit(контекст HttpContext) +159 System.Web.HttpRuntime.ProcessRequestNotificationPrivate(IIS7WorkerRequest wr, контекст HttpContext) +12679949

Ответ 1

Хорошо - нашел работу вокруг себя, разместив на случай, если кто-то другой заразится этой ошибкой MS. Проблема в том, что вы не можете добавить ссылку NuGet, как она уже включена в пакеты по умолчанию. Так что...

  • Открыть пакет .config
  • Удалить запись Newtonsoft.Json.
  • Сохранить и построить
  • Повторно добавьте Newtonsoft.Json из NuGet.
  • Сборка и запуск

Ответ 2

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

Обновление в любом проекте:

Update-Package Newtonsoft.Json -Reinstall

Обновление в конкретном проекте

Update-Package Newtonsoft.Json -Reinstall -Project My.App

Ответ 3

Единственное, что зафиксировало эту ошибку, - это добавить отсутствующий раздел в мой файл web.config, который я получил от этого ответа здесь: fooobar.com/questions/92866/...

Вот что мне нужно добавить:

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

Ответ 4

Я объединил пару вариантов, о которых говорили другие участники SO, плюс новый.

Во-первых, Оказывается, что Nuget 2.1 имеет некоторые проблемы, и эта проблема была зарегистрирована в ошибке и была исправлена ​​в 2.2.2. См. Здесь: https://nuget.codeplex.com/workitem/3050

Итак, я сделал следующие шаги:

  • Обновлена ​​версия Nuget до версии 2.2.2 по ссылке
  • Удалены все ссылки на Json в моем проекте, удалив из NUget (щелкните правой кнопкой мыши проект и найдите пакет и удалите (Even это не делалось)
  • Физически удаленные файлы пакета с компьютера. Я нашел файлы пакетов здесь://projectdir/packages/Newtonsoft.JSON
  • Удален файл packages.config из физического каталога (//projectname/packages.config)
  • Как только все это было завершено, я снова добавил Newtonsoft через Nuget, затем сделал пересоздание, и он сработал.

Ответ 5

У меня была та же проблема (в VS2012). Никакой ответ не помог мне. Наконец я решил это следующим образом:

1) Перейти к ИНСТРУМЕНТУ → РАСШИРЕНИЯ И ОБНОВЛЕНИЯ здесь обновить (или установить) "NuGet Package Manager" затем перейдите в "Интернет" и установите "Быстрое добавление NuGet" и "Ссылки на NuGet"

2) после того, как все в 1) в вашем проекте щелкните правой кнопкой мыши "Ссылки" и выберите "Управление пакетами Nuget", в "Установленные пакеты" найдите Json.NET. Нажмите "Удалить" - вы не можете сделать это сейчас, но он покажет вам, что вы должны сначала удалить (некоторый клиент ASP Web Api). Поэтому удалите все эти файлы и попробуйте удалить "Json.NET" еще раз. Теперь перейдите в "Интернет" и установите "Json.NET", "Библиотеки клиентов ASP.NET WEB API" и "OData клиента веб-интерфейса ASP.NET".

3) в строке удаления Global.asax "WebApiConfig.Register(GlobalConfiguration.Configuration);"

построить решение, и все будут в порядке.. Надеюсь, это может помочь кому-то:) gl

Ответ 6

Проверьте, была ли у вас ссылка "старый стиль" (pre nuget) на JSON.NET, указывающая на устаревшую локальную копию, встроенную в ваш проект.

У меня был старый Reference\Lib\JSON.NET, который был в моем ссылочном пути и получил приоритет.

Убедитесь, что страница свойств JSON.NET указывает на ожидаемую версию пакета Nuget.

У меня возникла проблема с сборкой Team Server, которая была развернута в прямом эфире. Я должен был исправить свое оригинальное решение и сделать чистую сборку, чтобы убедиться, что старая DLL Reference\Lib\ не была поднята.

Ответ 7

У меня было такое же FileNotFoundException, и оказалось, что у меня уже есть ссылка на Newtonsoft.Json в моем проекте, НО свойство "Копировать локальное" не было установлено в TRUE. Просто установите его в ИСТИНА, чтобы dll скопировалось в выходной каталог, если это тоже ваш случай.

Ответ 8

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

  • # Проекты /Web/App/...

# причина моей проблемы. Я удалил # и работал нормально.

Ответ 9

Что вызвало мою проблему с Newtonsoft.json, было несколько иначе. Я разработал приложение Windows, построенное против .NET 4.5. Позже я узнал, что клиентская среда поддерживает только .Net 4.0. Я скопировал решение в новую область, чтобы сохранить работу .Net 4.5 и изменил Свойства решения на Microsoft.Net 4.0. Я получил ошибку, которую Newtonsoft.json не удалось найти, и мне не хватало ссылки.

Я выполнил описанные выше процедуры для удаления packages.config; удаление Newtonsoft.json; что Newtonsoft.json был удален из каталога \packages; затем переустановить Newtonsoft.json из NuGet. Я смог скомпилировать и запустить приложение с .Net 4.0

До этого файл packages.config показал, что версия .Net, на которую нацелилась Newtonsoft.json, была .Net 4.5. Удаление и добавление Newtonsoft.json теперь имеет цель как .Net 4.0.

Ответ 10

Я сделал это по ошибке, и он отлично сортировал его.

Запустив новый проект VS 2012, я использовал NuGet для установки Newtonsoft.JSON, поскольку упомянутая версия 4.5.6 уже установлена, и я был впечатлен, увидев, что она была удалена и установлена ​​4.5.10.

Сладкое.

Ответ 11

В моем случае я проверил проект коллеги, который каким-то образом изменил мою рекомендацию Newtonsoft.Json, поэтому мне пришлось ее удалить. Щелкните правой кнопкой мыши по проекту → Управление пакетами NuGet. На левой стороне нажмите "Установленные пакеты", затем выберите Json.NET и удалите его. В моем случае мне пришлось также удалить другие зависимые пакеты (Microsoft ASP.Net Web API и другие). Выберите "Интернет" с левой стороны и найдите Json.Net, переустановите его.

Ответ 12

Вы можете попытаться установить пакет SocialAuth.Net с флагом -IgnoreDependencies, а затем вручную установить зависимости и убедиться, что вы установили только самую последнюю версию библиотеки Json.Net.

Затем во время выполнения пакет SocialAuth.Net будет уважать перенаправление сборки и загружать Json.Net(v4.5) вместо старой версии.

Ответ 13

У меня была такая же проблема в VS2012 express, и мне удалось установить ее из

ИНСТРУМЕНТЫ → Менеджер пакетов NuGet → Управление пакетами NuGet для решения

Там я нашел и установил Newtonsoft Json. Он не был установлен ни в одном из проектов от решения.