Контрольный модуль webapi

Я использую AspNet Web Api Client 5.0, и я пытаюсь использовать unit test веб-api-контроллер.

var encservice = new EncryptionService();
var acctservice = FakeServices.GetAccountService();
var controller = new AccountController(acctservice, encservice);
controller.Request = new HttpRequestMessage();

когда код

controller.Request.SetConfiguration(new HttpConfiguration());
Выполняется

i hit исключение

Сообщение. Не удалось загрузить файл или сборку "Newtonsoft.Json, Version = 4.5.0.0, Culture = neutral, PublicKeyToken = 30ad4fe6b2a6aeed" или одну из его зависимостей. Расположенное определение манифеста сборки не соответствует ссылке на сборку. (Исключение из HRESULT: 0x80131040)

Источник: System.Net.Http.Formatting

Stacktrace: в System.Net.Http.Formatting.JsonMediaTypeFormatter..ctor()    в System.Net.Http.Formatting.MediaTypeFormatterCollection.CreateDefaultFormatters()    в System.Net.Http.Formatting.MediaTypeFormatterCollection..ctor()    в System.Web.Http.HttpConfiguration.DefaultFormatters()    на System.Web.Http.HttpConfiguration..ctor(маршруты HttpRouteCollection)    в System.Web.Http.HttpConfiguration..ctor()    в EMR.Test.Controller.AccountControllerTest.Should_Get() в c:\PremiumProjectsCollection\emr\src\EMRAzure\EMRAzure\EMR.Test\Controller\AccountControllerTest.cs: строка 34

версия newsoft.json, которую я использую, - 6.0

У меня также есть перенаправление сборки в файле confgruration

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

Тест-бегун, который использует im, MStest, VS2012

Ответ 1

Вам нужно будет добавить перенаправление сборки:

<configuration>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <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>
    </assemblyBinding>
  </runtime>
</configuration>

(предполагая, что версия сборки Newtonsoft.Json точно равна 6.0.0.0.)

Ответ 2

(примечание к примечанию относится к проекту Web Api Client, имеющему эту проблему)

У меня была такая же проблема с версией Newtonsoft.Json, поэтому я удалил старые версии ссылок и использовал консоль диспетчера пакетов для установки последней версии Newtonsoft.Json в моей клиентской библиотеке Web Api и тестовом проекте.

Установочный пакет Newtonsoft.Json -Version 6.0.8 (обратите внимание, что вам может понадобиться узнать, какая из них является последней версией)

Проблема осталась, поэтому я понял, что произошел сбой между System.Net.Http.Formatting и моей последней версией Json. Чтобы решить эту проблему, удалите ссылки System.Net.Http и System.Net.Http.Formatting и установите клиентскую библиотеку WebApi через Nuget, как показано ниже:

Установочный пакет Microsoft.AspNet.WebApi.Client

Это решило это для меня.

Ответ 4

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

Я тестировал устройство, в котором была установлена ​​последняя версия NewtonSoft, в то время как у моего тестового проекта была более старая версия.

Что я сделал, чтобы обойти это, это объединить версии этой библиотеки в моем решении с помощью опции "Управление пакетами Nuget для решения", щелкнув правой кнопкой мыши по решению в обозревателе решений.

Это обновит все библиотеки NewtonSoft, имеющиеся в ваших проектах в рамках текущего решения, и удалит все старые версии из управления пакетами. VisualStudio создает в папке с именами пакетов в каталоге решений.