2014-02-19 3 views
19

я следующие ошибки, возникающие на моем сервере сборки (TFS/Visual Studio Интернет):Ссылка на сборку не может быть решена - зависимая проблема сборки?

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.configdependentAssembly запись в моем 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, но я не могу заставить ее работать.

+0

Чтобы диагностировать ошибки привязки, используйте Fusion Viewer: http://msdn.microsoft.com/en-us/library/e74a18c4(v=vs.110).aspx. – Polyfun

ответ

13

Вопрос был неожиданным.

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

<CodeAnalysisAdditionalOptions>/assemblyCompareMode:StrongNameIgnoringVersion</CodeAnalysisAdditionalOptions> 

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

+2

У меня такая же проблема на нашем тестовом сервере, но она отлично работает на моей машине dev, а .. не работает для меня. Также попробовал StrongNameIgnoringVersion, но не повезло. Это стоило мне нескольких дней. Любые другие идеи? – CRG

+1

Это спасло мой день. Это путь, когда вы не можете напрямую изменять конфигурацию Code Analysis (на корпоративных серверах сборки это обычно так) – SuperJMN

15

Если вы извлечено ваши файлы проекта, файлы пакета, а также ссылки и все версии являются правильными и последняя версия Newtonsoft, это может быть .Net dll с зависимостью от более ранней версии 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 , вызвавшего тестовый проект, устранило проблему.

+0

«Добавление инструкции в app.config вызывающего тестового проекта устраняет проблему». это решило мою проблему полностью. В проекте, который использовал System.Net.Http.Formatting redirect, уже был установлен, но этого было недостаточно. Каждый другой проект, который вызывает проект, должен также перенаправлять. –

2

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

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

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

Смежные вопросы