代码之家  ›  专栏  ›  技术社区  ›  Roger Lipscombe

无法从httpContextBase转换为httpContextBase

  •  3
  • Roger Lipscombe  · 技术社区  · 14 年前

    使用以下代码(使用MOQ 4.0.10501.6):

    HomeController controller = new HomeController();
    ActionResult result = _controller.Index();
    
    Mock<HttpResponseBase> response = new Mock<HttpResponseBase>();
    
    Mock<HttpContextBase> httpContext = new Mock<HttpContextBase>();
    httpContext.Setup(x => x.Response).Returns(response.Object);
    
    Mock<ControllerContext> controllerContext = new Mock<ControllerContext>();
    controllerContext.Setup(c => c.HttpContext).Returns(httpContext.Object);
    result.ExecuteResult(controllerContext.Object);
    

    …我得到以下编译器错误:

    error CS1502: The best overloaded method match for
    'Moq.Language.IReturns<System.Web.Mvc.ControllerContext,
     System.Web.HttpContextBase>.Returns(System.Web.HttpContextBase)'
    has some invalid arguments
    
    error CS1503: Argument 1: cannot convert from 'System.Web.HttpContextBase
    [c:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\
    v4.0\System.Web.dll]' to 'System.Web.HttpContextBase'
    

    我做错了什么?为什么我不能从 HttpContextBase HTTPTCP数据库 ?

    我从一个ASP.NET MVC项目开始,添加了一个nunit测试项目,并重新分析了缺少的system.web引用。根据vs中的属性窗口,我引用的system.web.dll是 C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\System.Web.dll .

    4 回复  |  直到 13 年前
        1
  •  7
  •   Roger Lipscombe    14 年前

    我发现(谢谢反射器) HttpContextBase 实际上是在 System.Web.dll, Version 4.0.0.0 在里面 System.Web.Abstractions, Version 3.5.0.0 .

    所以,我通过添加对 System.Web.Abstractions, Version 4.0.0.0 对这个项目。

    奇怪的是, System.Web.Abstractions,4.0.0.0版 包含 HTTPTCP数据库 .

    所以,我仍然不确定发生了什么,但至少现在正在编译。

        2
  •  1
  •   Benjol    13 年前

    可能是 System.Web 使用某物 System.Web.Abstractions 在内部 HttpContextBase .

    所以,大概 HTTPTCP数据库 课堂上有一些东西 system.web.摘要 .

        3
  •  0
  •   Darin Dimitrov    14 年前

    似乎您引用了 System.Web.Mvc 装配。尝试删除项目中对此程序集的所有引用,并将其从GAC中添加。

        4
  •  0
  •   Ted Nyberg    13 年前

    我想知道是否可以通过程序集重定向而不是在.NET 4.0项目中引用.NET 3.5程序集来解决这个问题?