无法从HttpContextBase转换为HttpContextBase

时间:2010-07-10 12:19:03

标签: c# asp.net-mvc moq

使用以下代码(使用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转换为HttpContextBase

我从一个ASP.NET MVC项目开始,添加了一个NUnit测试项目,ReSharper整理了缺少的System.Web参考。根据VS中的属性窗口,我引用的System.Web.dll是C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\System.Web.dll中的那个。

4 个答案:

答案 0 :(得分:7)

我发现(感谢Reflector)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, Version 4.0.0.0 不包含HttpContextBase

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

答案 1 :(得分:1)

可能System.Web使用System.Web.AbstractionsHttpContextBase内的内容。

因此,HttpContextBase类可能与System.Web.Abstractions有关。

答案 2 :(得分:0)

您似乎已经引用了System.Web.Mvc程序集的不同版本。尝试删除项目中对此程序集的所有引用,并从GAC添加它。

答案 3 :(得分:0)

我想知道是否可以使用程序集重定向修复此问题,而不是在.NET 4.0项目中引用.NET 3.5程序集?