开发者

Cannot convert from HttpContextBase to HttpContextBase

With the following code (using 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);

...I get the following compiler errors:

error CS1502: The best overloaded method match for
'Moq.Language.IRet开发者_开发百科urns<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'

What have I done wrong? Why can't I convert from HttpContextBase to HttpContextBase?

I started with an ASP.NET MVC project, added an NUnit test project and ReSharper sorted out the missing System.Web reference. According to the properties window in VS, the System.Web.dll that I'm referencing is the one in C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\System.Web.dll.


I discovered (thanks Reflector) that HttpContextBase is actually in System.Web.dll, Version 4.0.0.0 and in System.Web.Abstractions, Version 3.5.0.0.

So, I fixed it by adding a reference to System.Web.Abstractions, Version 4.0.0.0 to the project.

Oddly, however, System.Web.Abstractions, Version 4.0.0.0 doesn't contain HttpContextBase.

So, I'm still not sure what's going on, but at least it's compiling now.


May be System.Web uses something in System.Web.Abstractions within HttpContextBase.

So, probably HttpContextBase Class has something tied to System.Web.Abstractions.


It seems that you have referenced different versions of the System.Web.Mvc assembly. Try removing all references to this assembly in your projects and adding it from the GAC.


I wonder if this could be fixed with an assembly redirect instead of referencing a .NET 3.5 assembly in a .NET 4.0 project?

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜