Контрольный модуль 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
Это решило это для меня.
Ответ 3
Я не пробовал это сам, но, похоже, в 2012 году есть ошибка в mstest. Где вам нужно будет использовать файл .testsettings
для app.config.
См. следующую ссылку: http://social.msdn.microsoft.com/Forums/vstudio/en-US/234926d1-42c0-4ebb-af39-1626e72f6c39/why-does-assemblybinding-work-only-if-testsettings-file-is-used-vs2012rc?forum=vsunittest
Ответ 4
Я столкнулся с той же проблемой дней назад, и мне потребовалось несколько часов, чтобы найти решение для этого.
Я тестировал устройство, в котором была установлена последняя версия NewtonSoft, в то время как у моего тестового проекта была более старая версия.
Что я сделал, чтобы обойти это, это объединить версии этой библиотеки в моем решении с помощью опции "Управление пакетами Nuget для решения", щелкнув правой кнопкой мыши по решению в обозревателе решений.
Это обновит все библиотеки NewtonSoft, имеющиеся в ваших проектах в рамках текущего решения, и удалит все старые версии из управления пакетами. VisualStudio создает в папке с именами пакетов в каталоге решений.