Подтвердить что ты не робот

Ссылка на сборку не может быть решена - зависимая проблема сборки?

У меня есть следующие ошибки, возникающие на моем сервере сборки (TFS/Visual Studio Online):

CA0055 : Could not load C:\a\Binaries\Api.dll. The following error was encountered while reading module 'System.Net.Http.Formatting': Assembly reference cannot be resolved: Newtonsoft.Json, Version=4.5.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed.
CA0058 : The referenced assembly 'Newtonsoft.Json, Version=4.5.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed' could not be found. This assembly is required for analysis and was referenced by: C:\a\Binaries\Api.dll, C:\a\Sources\MyLocation\packages\Microsoft.AspNet.WebApi.Client.5.1.1\lib\net45\System.Net.Http.Formatting.dll.

Вот запись web.config dependentAssembly в моем проекте Api.dll для этой сборки:

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

Фактическая версия установленного пакета Json.NET NuGet 6.0.1:

enter image description here

При просмотре ссылок на проект у меня есть Newtonsoft.Json как 6.0.0.0:

enter image description here

Версия System.Net.Http.Formatting в ссылках - 5.1.0.0.

Восстановление NuGet включено в определении сборки, и у меня нет этих ошибок на моей локальной копии, только в TFS.

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

Я думаю, что это может быть из-за записи dependentAssembly, но я не могу заставить ее работать.

4b9b3361

Ответ 1

Проблема была неожиданной.

Исправление должно включать следующую строку в файле проекта в каждом соответствующем разделе <PropertyGroup>:

<CodeAnalysisAdditionalOptions>/assemblyCompareMode:StrongNameIgnoringVersion</CodeAnalysisAdditionalOptions>

Чтобы отредактировать файл проекта, щелкните правой кнопкой мыши проект и выберите "Выгрузить проект". Теперь щелкните правой кнопкой мыши на выгруженном проекте и выберите "Редактировать MyProject.csproj

Ответ 2

Если вы очистили файлы проекта, файлы пакетов, ссылки и все версии - это правильная и последняя версия Newtonsoft, это может быть DLL.Net с зависимостью от более ранней версии Newtonsoft.Json. В моем случае это была System.Net.Http.Formatting, Version = 4.0.0.0:

enter image description here

Попробуйте добавить следующее к *.config вызывающего проекта:

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

При запуске тестового проекта против проекта WebAPI исключение FileNotFound выбрасывается из WebAPI из-за несоответствия версии Newtonsoft.Json между 4.5.0.0 и 6.0.1.0. Добавление инструкции в app.config вызывающего тестового проекта устраняет проблему.

Ответ 3

в моем случае Newtonsoft.Json bindingredirect не работал, потому что каким-то образом файл root.config не был частью развернутых файлов.

Проверьте свойства вашего файла web.config. В нашем случае значение "Build Action" было установлено на "None". Он должен быть установлен в "Содержимое", чтобы быть частью развернутых файлов на сервере.

Также объясняется, почему веб-сайт работал над (локальным) IISexpress, но не на полном экземпляре IIS.