2012-01-17 5 views
5

У меня есть решение с различными проектами в нем. Один из них - проект MVC 3, а другой - тестовый проект.Не удалось загрузить файл или сборку «System.Web.Mvc

Из тестового проекта я пытаюсь проверить поведение своих контроллеров. Но когда я бегу тест система выдает сообщение об ошибке говорит мне это:

System.IO.FileNotFoundException: Не удалось загрузить файл или сборку «System.Web.Mvc, Version = 1.0.0.0, Culture = нейтральный, PublicKeyToken = 31bf3856ad364e35 'или одна из его зависимостей. Система не может найти указанный файл.
ПРПЖД: Сборка связывания протоколирование включено OFF.To включить ведение журнала сборки отказов привязки, установите значение реестра [HKLM\Software\Microsoft\Fusion!EnableLog] (DWORD) до 1.

Код из теста Os следующее:

[TestMethod] 
public void TestMethod() 
{ 
    var myService = new Mock<IMyService>(); 
    myService.Setup(a => a.ReadAuthorizationRequest()) 
     .Returns<EndUserAuthorizationRequest>(null); 
    int error = 0; 
    var controller = new myController(myService.Object); 

    try 
    { 
     var actionResult = controller.Authorize(); 
    } 
    catch (HttpException exception) 
    { 
     error = exception.GetHttpCode(); 
    } 
    Assert.AreEqual(403, error); 
} 

контроллер:

public class myController: Controller 
{ 
    private readonly IMyService _service; 

    public OAuthController(IMyService service) 
    { 
     _service = service; 
    } 

    [Authorize, AcceptVerbs(HttpVerbs.Get | HttpVerbs.Post)] 
    public ActionResult Authorize() 
    { 
     ClientApplication requestingClient; 
     var request = _service.ReadAuthorizationRequest(); 
     if (request == null) 
     { 
      throw new HttpException((int) HttpStatusCode.BadRequest, 
       "Missing authorization request."); 
     } 
    } 
} 

Как вы можете видеть, я пытаюсь проверить поведение контроллера, так что всякий раз, когда служба не читает запрос, контроллер должен бросить httpException с httpStatusCode 403.

Что не так с этим. Заранее спасибо.

ответ

12

Из вашего исключения:

System.IO.FileNotFoundException: Не удалось загрузить файл или сборку «System.Web.Mvc, Version = 1.0.0.0

Он пытается загрузить MVC версия 1. Вы, вероятно, нужно сделать сборку привязки перенаправлять в тестовом проекте, а, так же, как тот, в web.config:

<runtime> 
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
     <dependentAssembly> 
     <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" /> 
     <bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="3.0.0.0" /> 
     </dependentAssembly> 
    </assemblyBinding> 
    </runtime> 

Место, что в configuration в разделе app.config вашей тестовой сборки.

1

Или вы можете добавить ссылку на правильную версию dll в тестовом проекте.

2

У меня была такая же ошибка после установки VS 2012, ни один из проектов в моем решении не ссылается на System.Web.Mvc. Проблема была решена для меня, когда я добавил System.Web.Mvc.dll в GAC.

Вот шаги, которые я сделал:

  1. Скачать System.Web.Mvc длл 1,0 файл.
  2. Нажмите кнопку «Пуск», выберите «Все программы», «Visual Studio», «Инструменты Visual Studio», а затем «Командная строка Visual Studio».
  3. Тип в следующем: GacUtil -I {папку, где вы загрузили System.Web.Mvc.dll} т.е. C: \ Users \ Ваше имя \ Desktop \ System.Web.Mvc.dll

I надеюсь это поможет.

1

В случае, если кто-то ищет решение этой проблемы в Visual Studio 2012, этот сайт помог мне:

http://www.yeronimo.nl/post/2013/03/27/Error-1-Referencesvcmap-Could-not-load-file-or-assembly-xxxxxxx-etc

(также: http://www.christowles.com/2012/08/could-not-load-file-or-assembly.html)

правой кнопкой мыши на веб-сайте (Reference.svcmap) в проводнике решений проекта (в разделе App_WebReferences> [Имя вашей веб-службы]> Reference.svcmap) и нажмите «Настроить ссылку на службу ...», затем снимите флажок, который гласит «Типы повторного использования в ссылках сборки».

Нажмите «ОК», а затем перестройте проект! Это сработало для меня!

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