Проект 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.