Проект Web API не будет работать, когда его развернут - не удалось загрузить файл или сборку " Newtonsoft.Json, Версия=4.5.0.0

Я продолжаю получать эту ошибку при развертывании моего проекта MVC 5 WEB API:

не удалось загрузить файл или сборку Newtonsoft'.Json, Версия=4.5.0.0, Культура=нейтральная, PublicKeyToken=30ad4fe6b2a6aeed ' или один из ее зависимости. Система не может найти указанный файл.

я следовал этой и переустановить пакет NuGet " Update-Package Newtonsoft.В JSON-переустановить", но это не сработало.

У кого-нибудь есть что может быть не так?

5 ответов


Проверьте ссылку на Newtonsoft.JSON DLL и убедитесь, что он не выбрал автоматически версию вне папки пакетов в вашем решении.

мой VS 2013 продолжал находить другие копии в различных /program files (x86)/... папки. Он игнорировал даже явное добавление DLL версии пакета в проект. Пришлось копнуть глубже, чтобы понять, почему это происходит...

расследование

Я открыл проект .csproj файл, в режиме редактирования текста, и искал все ссылки на Newtonsoft.формат JSON.

оказалось, что у меня не одна, а две ссылки на DLL в моем файле csproj (я не знал, что это возможно). Один из них ссылался на более старый Newtonsoft.json 5.0.6 (текущий был 5.0.8).

решение

вместо того, чтобы вручную удалить один из них, я добавил этот недостающий элемент во второе включение DLL. Я также изменил номер версии 5.0.8:

  <Private>True</Private>

так это теперь выглядело например:

<Reference Include="Newtonsoft.Json, Version=4.5.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
  <HintPath>..\..\CsQueryTest\packages\Newtonsoft.Json.5.0.8\lib\net45\Newtonsoft.Json.dll</HintPath>
  <Private>True</Private>
</Reference>

Private - это параметр, определяющий "копировать локально" для ссылки на DLL. Затем он снова начал включать DLL в вывод!

я выясню, что удалить из файла csproj, но пока это может заставить вас идти, если у вас есть эта проблема. Похоже, причиной могло быть прошлое обновление NUGET.


вы пытались поместить перенаправление сборки в свою веб-конфигурацию, чтобы убедиться, что ваше приложение ищет правильную версию:

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

Управление пакетами Nuget для всего решения, а не только для проекта. Вы должны увидеть несколько версий Newtonsoft.В JSON нет. Выберите самую низкую версию, а затем выберите Управление. Снимите все флажки и подтвердите. После того, как он был успешно удален, повторите процесс для любых других меньших версий. Когда все, что у вас осталось, это одна, последняя версия пакета, нажмите "Управление" на этом и проверьте все проекты, где его нет. После завершения установки, вы будете хорошо ходить.


последняя версия Newtonsoft JSON-5.0.8, что, скорее всего, ваша переустановка через NuGet получила вас.

Если при щелчке правой кнопкой мыши и посмотрите на свойства для ссылки на Newtonsoft JSON dll, и он говорит 5.0.8, вы можете просто установить конкретную версию в False, и ваш текущий код должен работать.


шаблон проекта в VS2013 имеет эту действительно раздражающую привычку, он ссылается на Newtonsoft.Json как пакет nuget под ссылочными свойствами "копировать локальный" он помечен как False.

выбрать "Копировать локально" в True

по существу создать новый проект - > развернуть не работает поле без этой настройки.

Примечание: Обновление Newtonsoft.Json изменит локальное значение копирования на True.