asp.net-mvc – 为什么Visual Studio 2010混合了System.Web和System.Web.Abstractions?

Visual Studio 2010似乎混淆了上面提到的库.

代码示例来自Steven Sanderson的“Pro ASP.NET MVC2 Framework”一书.

[TestMethod]
public void HomePage_Recognizes_New_Visitor_And_Sets_Cookie() 
{
    // Arrange: First prepare some mock context objects
    var mockContext = new Mock<HttpContextBase>();
    var mockRequest = new Mock<HttpRequestBase>();
    var mockResponse = new Mock<HttpResponseBase>();

    // The following lines define associations between the different mock objects
    // (i.e. tells Moq what alue to use for tMockContext.Request)
    mockContext.Setup(x=> x.Request).Returns(mockRequest.Object);
    mockContext.Setup(x=> x.Response).Returns(mockResponse.Object);
    mockRequest.Setup(x=> x.Cookies).Returns(new HttpCookieCollection());
    mockResponse.Setup(x=> x.Cookies).Returns(new HttpCookieCollection());

    var homeController = new HomeController();
    var requestContext = new RequestContext(mockContext.Object,new RouteData());
    homeController.ControllerContext = new ControllerContext(requestContext,homeController);

    // Act
    ViewResult viewResult = homeController.HomePage();

    // Assert
    Assert.AreEqual(String.Empty,viewResult.ViewName);
    Assert.IsTrue((bool)viewResult.ViewData["IsFirstVisit"]);
    Assert.AreEqual(1,homeController.Response.Cookies.Count);
    Assert.AreEqual(bool.TrueString,homeController.Response.Cookies["HasVisitedBefore"].Value);
}

我的项目引用了System.Web和System.Web.Abstractions库.

代码文件只是“使用System.Web”时,我得到两个错误

>(‘Assert’一词下的第25行)’System.Web.HttpResponseBase’类型在未引用的程序集中定义.您必须添加对程序集’System.Web.Abstractions,Version = 3.5.0.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35’的引用.
>(第25行和第26行,单词’Cookies’)’System.Web.HttpResponseBase’不包含’Cookies’的定义,也没有扩展方法’Cookies’接受’System.Web.HttpResponseBase’类型的第一个参数可以找到(你错过了使用指令或程序集引用吗?)

如果我将“使用System.Web.Abstractions”添加代码文件并构建项目,上面的错误消失但后来我收到以下错误

>名称空间’System.Web’中不存在类型或命名空间名称’Abstractions'(您是否缺少程序集引用?)

有趣的是,在两种情况下,当我在Response之后放置一个点时,Intellisense会提示我正确的选择(即Response.Cookies).似乎Intellisense有关于HttpResponseBase的信息,而构建引擎却没有.

知道可能导致这种情况的原因吗?

解决方法

你能仔细检查一下你的Project References中你有System.Web和System.Web.Abstractions吗?

使用从Apress站点下载的书籍的源代码,我可以毫无错误地构建您的代码,但是当我删除对System.Web.Abstractions的引用时,我会得到相同的行为,包括您注意到的intellisense信息提示.

相关文章

### 创建一个gRPC服务项目(grpc服务端)和一个 webapi项目(...
一、SiganlR 使用的协议类型 1.websocket即时通讯协议 2.Ser...
.Net 6 WebApi 项目 在Linux系统上 打包成Docker镜像,发布为...
一、 PD简介PowerDesigner 是一个集所有现代建模技术于一身的...
一、存储过程 存储过程就像数据库中运行的方法(函数) 优点:...
一、Ueditor的下载 1、百度编辑器下载地址:http://ueditor....