2012-01-17 90 views
5

Tengo una solución con diferentes proyectos, uno es un proyecto MVC 3 y el otro es un proyecto de prueba.No se pudo cargar el archivo o el ensamblado 'System.Web.Mvc

Desde el proyecto de prueba, estoy tratando de probar el comportamiento de mis controladores. Pero cuando estoy corriendo una prueba del sistema emite un error que me dice esto:

System.IO.FileNotFoundException: No se pudo cargar el archivo o ensamblado 'System.Web.Mvc, Version = 1.0.0.0, Culture = neutral, PublicKeyToken = 31bf3856ad364e35 'o una de sus dependencias. El sistema no puede encontrar el archivo especificado.
AVS: se activa OFF.To habilitar el registro de error de vinculación montaje Asamblea tala vinculante, establece el valor del registro [HKLM\Software\Microsoft\Fusion!EnableLog] (DWORD) a 1.

El código de la prueba os el siguiente:

[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); 
} 

el controlador:

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."); 
     } 
    } 
} 

Como se puede ver, estoy tratando de probar el comportamiento del controlador, por lo que, siempre que el servicio no ha leído la solicitud del el controlador debe lanzar una httpException con httpStatusCode 403.

¿Qué hay de malo en esto? Gracias de antemano.

Respuesta

12

Desde su excepción:

System.IO.FileNotFoundException: No se pudo cargar el archivo o ensamblado 'System.Web.Mvc, versión = 1.0.0.0

Se está intentando cargar MVC versión 1. Es probable que tenga que hacer una redirección de enlace en su proyecto de prueba de montaje, así, igual que el que está en el 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> 

lugar que en el configuration sección de la aplicación.config de su ensamblaje de prueba.

1

O puede agregar una referencia a la versión dll correcta en el proyecto de prueba.

2

Tuve el mismo error después de instalar VS 2012, ninguno de los proyectos en mi solución hace referencia a System.Web.Mvc. El problema se resolvió para mí cuando agregué System.Web.Mvc.dll al GAC.

Estos son los pasos que hice:

  1. Descargar System.Web.Mvc archivo DLL 1.0.
  2. Haga clic en Inicio, haga clic en Todos los programas, haga clic en Visual Studio, haga clic en Herramientas de Visual Studio y luego en Símbolo del sistema de Visual Studio.
  3. Escribe la siguiente: gacutil -I {carpeta donde descargó el System.Web.Mvc.dll} es decir, C: \ Users \ Nombre \ Desktop \ System.Web.Mvc.dll

I espero que esto ayude.

1

En caso de que alguien está buscando una solución a este problema en Visual Studio 2012, este sitio me ayudó a salir:

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

(también: http://www.christowles.com/2012/08/could-not-load-file-or-assembly.html)

Haga clic derecho en la web referencia de servicio (Reference.svcmap) en el explorador de soluciones del proyecto (en App_WebReferences> [Nombre de su servicio web]> Reference.svcmap) y haga clic en "Configurar referencia de servicio ...", luego desmarque la casilla de verificación que dice "Reutilizar tipos en referenciados" asambleas ".

Haga clic en Aceptar, ¡y luego reconstruya el proyecto! ¡Funcionó para mí!

Cuestiones relacionadas