2010-09-30 12 views
5

Visual Studio 2010 wydaje się mieszać wyżej wymienione biblioteki.Dlaczego program Visual Studio 2010 miesza się z System.Web i System.Web.Abstractions?

Ten przykładowy kod pochodzi z książki "Pro ASP.NET MVC2 Framework" autorstwa Stevena Sandersona.

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

Mój projekt odwołuje się do bibliotek System.Web i System.Web.Abstractions.

Gdy plik kod jest tylko „za pomocą System.Web” Mam dwa błędy:

  1. (linia 25 pod słowem „Assert”) typu „System.Web.HttpResponseBase” jest zdefiniowane w sposób montaż, do którego nie odwołuje się. Należy dodać odniesienie do zestawu "System.Web.Abstractions, Version = 3.5.0.0, Culture = neutral, PublicKeyToken = 31bf3856ad364e35 '.
  2. (Linie 25 i 26 pod nazwą "Cookies") "System.Web.HttpResponseBase" nie zawiera definicji "plików cookie" ani metody rozszerzającej "Pliki cookie" akceptujących pierwszy argument typu "System.Web.HttpResponseBase 'można odnaleźć (czy brakuje using dyrektywa lub odwołania do zestawu?)

Jeśli dodać «używając System.Web.Abstractions» do pliku z kodem i zbudować projekt, powyższe błędy odejść, ale potem następnie pojawia się następujący błąd:

  1. Nazwa typu lub obszaru nazw "Abstrakcje" nie istnieje w przestrzeni nazw "System.Web" (czy brakuje zespołu odniesienie?)

Co ciekawe, w obu przypadkach, gdy umieszczam kropkę po odpowiedzi, Intellisense monituje mnie o prawidłowe wybory (tj. Response.Cookies). Wygląda na to, że Intellisense ma informacje o HttpResponseBase, których nie ma w silniku kompilacji.

Każdy pomysł, co może być przyczyną tego?

Odpowiedz

7

Czy możesz dwukrotnie sprawdzić, czy pod Twoimi Referencjami Projektu masz zarówno System.Web, jak i System.Web.Abstractions?

Korzystając z kodu źródłowego do książki pobranej ze strony Apress, mogę zbudować twój kod bez błędów, ale kiedy usunę odniesienie do System.Web.Abstractions, otrzymam takie samo zachowanie, włącznie z monitami informacyjnymi intellisense, które zauważyłeś.

+1

To było pominięte odniesienie. Szukałem odniesienia do System.Web.Abstractions w moim projekcie WebUI, a nie w projekcie UnitTests. Dzięki. Zachowanie jest nadal dość dziwne. – Jason

+0

Słodki. Dzięki ! –

4

Problem polega na tym, że typy opakowania (HttpContextWrapper i przyjaciele) występują w zespole o nazwie System.Web.Abstractions, ale znajdują się w przestrzeni nazw System.Web (dlatego dodanie instrukcji using nie jest rozwiązaniem tutaj).

Zostaw tam using System.Web i upewnij się, że masz odwołanie (w pliku projektu) do zestawu System.Web.Abstractions, a wszystko powinno być w porządku.

Powiązane problemy