Nazwa typu lub przestrzeni nazw nie istnieje w przestrzeni nazw „System.Web.Mvc”


217

Rozwiązanie Buiding MVC3 poszło dobrze, ale wystąpił błąd w przeglądarce:

Komunikat o błędzie kompilatora: CS0234: Typ lub nazwa przestrzeni nazw „Html” nie istnieje w przestrzeni nazw „System.Web.Mvc” (brakuje odniesienia do zestawu?)

Source Error:
Line 25:         <add namespace="System.Web.Mvc" />
Line 26:         <!--<add namespace="System.Web.Mvc.Ajax" />-->
Line 27:         <add namespace="System.Web.Mvc.Html" />
Line 28:         <add namespace="System.Web.Routing" />
Line 29:         <add namespace="System.Web.WebPages" />

Zainstalowałem pakiety dla rozwiązania NuGeti skonfigurowałem dla wszystkich projektów MVC3. Czy MVC3to biblioteki System.Web.Mvc.Ajax, System.Web.Mvc.Htmli innych? Dlaczego dostaję błąd?


W folderze References mam System.Web.Mvc

Runtime version: v4.0.30319,

Version: 3.0.0.0

Web.config

<?xml version="1.0" encoding="utf-8"?>
<!--
  For more information on how to configure your ASP.NET application, please visit
  http://go.microsoft.com/fwlink/?LinkId=152368
  -->
<configuration>
  <configSections>
    <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
  </configSections>
  <appSettings>
    <add key="aspnet:UseTaskFriendlySynchronizationContext" value="true" />
    <add key="webpages:Version" value="1.0.0.0" />
    <add key="ClientValidationEnabled" value="true" />
    <add key="UnobtrusiveJavaScriptEnabled" value="true" />
  </appSettings>
  <system.web>
    <compilation debug="true" targetFramework="4.5" />
    <authentication mode="Forms">
      <forms loginUrl="~/Account/LogOn" timeout="2880" />
    </authentication>
    <pages>
      <namespaces>
        <add namespace="System.Web.Helpers" />
        <add namespace="System.Web.Mvc" />
        <add namespace="System.Web.Mvc.Ajax" />
        <add namespace="System.Web.Mvc.Html" />
        <add namespace="System.Web.Routing" />
        <add namespace="System.Web.WebPages" />
      </namespaces>
    </pages>
    <httpRuntime targetFramework="4.5" encoderType="System.Web.Security.AntiXss.AntiXssEncoder, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
    <machineKey compatibilityMode="Framework45" />
    <profile defaultProvider="DefaultProfileProvider">
      <providers>
        <add name="DefaultProfileProvider" type="System.Web.Providers.DefaultProfileProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="DefaultConnection" applicationName="/" />
      </providers>
    </profile>
    <membership defaultProvider="DefaultMembershipProvider">
      <providers>
        <add name="DefaultMembershipProvider" type="System.Web.Providers.DefaultMembershipProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="DefaultConnection" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10" applicationName="/" />
      </providers>
    </membership>
    <roleManager defaultProvider="DefaultRoleProvider">
      <providers>
        <add name="DefaultRoleProvider" type="System.Web.Providers.DefaultRoleProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="DefaultConnection" applicationName="/" />
      </providers>
    </roleManager>
    <sessionState mode="InProc" customProvider="DefaultSessionProvider">
      <providers>
        <add name="DefaultSessionProvider" type="System.Web.Providers.DefaultSessionStateProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="DefaultConnection" />
      </providers>
    </sessionState>
  </system.web>
  <system.webServer>
    <validation validateIntegratedModeConfiguration="false" />
  </system.webServer>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="3.0.0.0" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
  <entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
  </entityFramework>
  <connectionStrings>
    <add name="EFDbContext" connectionString="Data Source=.\SQLEXPRESS;Initial Catalog=SportStore;Integrated Security=True;Pooling=False;" providerName="System.Data.SqlClient" />
  </connectionStrings>
</configuration>

MSDN przestrzeń nazw System.Web.Mvc

plik packages.config:

<?xml version="1.0" encoding="utf-8"?>
<packages>
  <package id="EntityFramework" version="5.0.0-rc" />
  <package id="jQuery" version="1.7.2" />
  <package id="jQuery.UI.Combined" version="1.8.11" />
  <package id="jQuery.Validation" version="1.9" />
  <package id="Microsoft.AspNet.Mvc" version="3.0.20105.1" />
  <package id="Microsoft.AspNet.Providers.Core" version="1.0" />
  <package id="Microsoft.AspNet.Providers.LocalDB" version="1.0" />
  <package id="Microsoft.AspNet.Razor" version="1.0.20105.408" />
  <package id="Microsoft.AspNet.WebPages" version="1.0.20105.408" />
  <package id="Microsoft.Web.Infrastructure" version="1.0.0.0" />
  <package id="Modernizr" version="2.0.6" />
  <package id="Moq" version="4.0.10827" />
  <package id="Ninject" version="3.0.1.10" />
</packages>

1
jaki jest twój serwer internetowy? czy to jest w iis?
Daniel A. White

Express IIS w Visual Studio 2012
J.Olufsen,

1
jaki jest cel twojego projektu?
Daniel A. White


2
Zależy, kto trafi na to pytanie - to wszystko, co jest potrzebne niektórym z nas Zarządzaj pakietami Nuget dla rozwiązania ... >> Aktualizacje
Tom Stickel

Odpowiedzi:


420

Wyczyść swoje rozwiązanie, a następnie ustaw właściwość tych plików na Copy Local = True.

Aby ustawić właściwość Kopiuj lokalnie na Prawda lub Fałsz

W Eksploratorze rozwiązań kliknij przycisk Pokaż wszystkie pliki, aby wyświetlić węzeł Odwołania.

  • Otwórz węzeł Referencje dla projektu.
  • Kliknij odnośnik prawym przyciskiem myszy na liście Referencje i kliknij Właściwości. Właściwości powiązane z tym odwołaniem pojawiają się na liście w oknie Właściwości.
  • W oknie Właściwości zmień właściwość Kopiuj lokalnie na Prawda lub Fałsz.

11
Niesamowite! To naprawiło to dla mnie w projekcie MVC4. To trochę oczywiste, kiedy się nad tym zastanowić. Nigdy nie patrzyłem na wdrożony projekt, aby sprawdzić, czy są tam biblioteki DLL.
Alex Kilpatrick

1
Dzięki! To mi też pomogło!
Maritim

1
Nie ma za co. Czasami złożone problemy są rozwiązywane przez proste rozwiązanie. :)
Toffee

5
To działa! System.Web.Mvc
Zmieniam

5
Zajęło mi trochę czasu, aby dowiedzieć się, co oznaczają te pliki. Przejrzyj odniesienia do zestawu dla każdego projektu w rozwiązaniu, wszystko z „Microsoft ASP.NET \ ASP.NET MVC 3 \ Assemblies” lub podobnym na ścieżce jest częścią problemu.
Zadanie

60

Z jakiegokolwiek powodu DWIE moje rozwiązania mają projekty internetowe, które spontanicznie odinstalowały asp.net MVC. Zainstalowałem go z Nuget i teraz oba znów działają. Stało się tak po ostatniej partii aktualizacji systemu Windows, które obejmowały aktualizacje frameworku .net dla używanej przeze mnie wersji (4.5.1).

Edycja: Z bloga .Net Development and Tools Blog:

Aktualizacja zabezpieczeń MS14-059 Microsoft Asp.Net MVC złamała moją wersję!


4
Tak mi się właśnie stało. Jednak zaktualizowałem moje pakiety MVC zamiast ponownie je instalować (moje i tak były nieaktualne). Czy jest jakieś źródło lub przyczyna tego?
Joshua H

5
Wygląda to na związane z KB2994379 lub KB2992080 , w zależności od wersji MVC, do której się odwołujesz (odpowiednio 5.1 i 5.0). Aktualizacja dostarcza nową wersję System.Web.Mvc, która, jak przypuszczam, wprowadza konflikt wersji. Aktualizacja pakietu MVC naprawi błąd. Jeśli nie możesz dokonać aktualizacji z jakiegokolwiek powodu, musisz ustawić System.Web.Mvc.dll, aby był kopiowany lokalnie.
Vinney Kelly,

1
Miałem ten sam problem. Zaktualizuj pakiet i ustaw kopiuj local = true. Dziękuję wszystkim!!!!
Vackup

1
Kopiuj MVC lokalnie = prawda +1.
Stanomatic

4
To samo mi się przydarzyło. Musiałem ustawić MVC na kopiowanie lokalne = FAŁSZ, odbudowanie, skopiowanie lokalne = PRAWDA, odbudowanie. Wszystko dobrze.
Jeppebm

38

Ten zwykle łapie mnie, gdy uruchamiam z IIS, a pula aplikacji dla domyślnej witryny jest ustawiona na .NET w wersji 2.0. Podczas korzystania z IIS ze Visual Studio tworzy katalog wirtualny, ale nadal działa w ramach domyślnej puli aplikacji serwisu. Jeśli używasz wbudowanego serwera internetowego, kliknij prawym przyciskiem myszy swój projekt internetowy, przejdź do właściwości i upewnij się, że używasz go w odpowiedniej wersji .NET. W usługach IIS sprawdź wersję .NET w puli aplikacji.

Zgodnie z moim ostatnim komentarzem na temat tego, jak projekt został utworzony - czy poprawnie dołączasz zestawy, jak poniżej (wzięte z domyślnego pliku web.config wygenerowanego przez szablon projektu MVC3 w VS10):

<compilation debug="true" targetFramework="4.0">
      <assemblies>
        <add assembly="System.Web.Abstractions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        <add assembly="System.Web.Helpers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        <add assembly="System.Web.Routing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        <add assembly="System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        <add assembly="System.Web.WebPages, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
      </assemblies>
</compilation>

2
Wszystkie projekty korzystają z .NET Framework 4.5. Czy to oznacza, że ​​.NET 4.5 nie może znaleźć System.Web.Mvc.Ajax i innych klas?
J.Olufsen

Zwykle oznacza to, że działa jako 4.5, ale tak naprawdę działa jako coś innego, co oznacza, że ​​nie może znaleźć System.Web.Mvc.Ajax w System.Web.Mvc.
BlackSpy

Na marginesie, jaka jest twoja wersja System.Web.dll? Powód, dla którego pytam, to to, że powiedziałeś, że dodałeś zestawy z NuGet - czy nie stworzyłeś projektu internetowego MVC3?
BlackSpy

31

Musisz zaktualizować MVC.

  1. Przejdź do Narzędzia -> Menedżer pakietów NuGet -> Zarządzaj pakietami NuGet dla rozwiązania
  2. Kliknij „Aktualizacje”
  3. Zaktualizuj „Microsoft ASP.NET MVC”
  4. Przebuduj rozwiązanie

1
Korzystanie z pakietu NuGet jest dobre, jednak można pobrać mnóstwo innych zestawów, które mogą nie być potrzebne, ale to naprawi to.
Canvas

1
Miałem ten sam problem, zdobądź nagrodę.
Nit

28

Miałem ten sam problem - mój scenariusz polegał na tym, że odwoływałem się do nowego System.Web.Mvc.dll z folderu lib i nie ustawiłem „Kopiuj lokalnie” na „prawda”. Aplikacja następnie powracała do wersji w GAC, która nie zawierała poprawnych przestrzeni nazw (HTML, Ajax itp.) I dawała mi błąd czasu działania.


16

Moje rozwiązanie było w obszarze Zarządzaj pakietami Nuget dla rozwiązania ... - Miałem wiele aktualizacji do zrobienia dla kilku pakietów.

Pozwól mi cofnąć się o pół kroku i powiedzieć, że spieprzyłem się, ponieważ przeniosłem rozwiązanie i projekty z jednego folderu do drugiego ... więc sprawy były już nie do zniesienia w porównaniu z tym, co projekty wymyśliły. Wszystko poszło dobrze, ale najwyraźniej Nuget jest zdezorientowany, chyba że zastosujesz inne podejście niż ja.

Powrót do rozwiązania ... Po prostu poszedłem do Zarządzaj pakietami Nuget dla rozwiązania ... >> Aktualizacje >> Microsoft i .NET i nacisnąłem przycisk Aktualizuj wszystko .

Wszystko wróciło do normy i było szczęśliwe.


Opublikowałem rozwiązanie tego samego typu, które przypadkowo pomija Twój post +1 dla Ciebie
Tom Stickel

To była również poprawka dla mnie.
bradj

Pamiętaj, że po wykonaniu tej czynności może być również konieczne zaktualizowanie JQuery i Bootstrap
Carl Onager

Aktualizacja pakietów mvc, maszynki do golenia i stron internetowych działała dla mnie w projekcie MVC5.
voam

9

Pobrałem projekt mvc 5, a problem dotyczący przestępstw wskazuje

<add namespace="System.Web.Mvc.Ajax" />  

Z tym komunikatem o błędzie:

CS0234: The type or namespace name 'Ajax' does not exist in the namespace 'System.Web.Mvc' (are you missing an assembly reference?)

-> w którym wszedłem na tę stronę i wypróbowałem czyste i kilka rzeczy powyżej itp ...

To, co zadziałało, to po prostu

Manage Nuget and Update all the packages.  Then it worked fine.

1
Och, zostawię swój post, ale widzę, że azarc3 mówi to samo. głosowanie go.
Tom Stickel

7

Uruchomienie następującego polecenia w menedżerze pakietów nuget naprawiło to dla mnie:

update-package microsoft.aspnet.mvc -reinstall

2
To należy poddać ocenie jeszcze około tysiąc razy.
Chazt3n

1
@ Chazt3n Nie działało dla mnie, ale to dobra sugestia, więc + 1
Jared Beach

Wypróbowałem wszystkie inne metody i technicznie korzystałem z Menedżera pakietów, odinstalowałem i ponownie zainstalowałem i zaktualizowałem, a co nie. Byłem więc pesymistą co do tej odpowiedzi, ale zdesperowany. To działało jakoś.
Mahesh,

6

Ta odpowiedź jest dość późna, biorąc pod uwagę datę pytania, ale ktoś może uznać ją za przydatną.

Żadne z powyższych rozwiązań nie działało dla mnie w Visual Studio 2012 w lokalnym projekcie Net Framework 4.5 MVC 4. Dla kontekstu, podążałem za samouczkiem na temat tworzenia interfejsu API sieci Web na platformie CodeProject ( http://www.codeproject.com/) Artykuły / 615805 / Creating-a-Clean-Minimal-Footprint-ASP-NET-WebAPI ), gdy napotkałem ten problem.

Dla mnie zadziałało jawne dodanie „System.Web.Mvc” do referencji mojej aplikacji, mimo że aplikacja już zawierała odwołanie do „System.Web”.


Dzięki. To rozwiązało mój problem (chociaż był to z DevExpress.Web.Mvc)
dferraro

+1. Korzystam z MvcSiteMapProvider, a ponieważ nie działa on z najnowszymi zestawami MVC, nie mogłem wykonać „Aktualizuj wszystko” dla pakietów Microsoft ASP.Net MVC przez nuget. Jeszcze jedna sugestia: prawdopodobnie musisz zrobić „CopyLocal = True” dla tego zestawu.
user007

Potrzebowałem tylko wypchnąć debugującą aplikację internetową do nowego środowiska. Konieczne było dodanie „skopiuj lokalnie” do odwołania.
dudeNumber4

4

Miałem ten sam problem, ale żadne z powyższych nie działało dla mnie. Jednak skierowali mnie w dobrym kierunku.

Na przykład, gdy ustawię „Kopiuj lokalnie” na „prawda” dla odwołania System.Web.Mvc, automatycznie ustawi to z powrotem na False.

Mam wiele projektów, które zależą od odwołania System.Web.Mvc w moim rozwiązaniu, ale tylko jeden spowodował ten problem. W VS 2012 odniesienie to jest oznaczone żółtym trójkątem uwagi.

Znajdź to odniesienie => usuń = ponownie dodaj

To naprawiło to dla mnie. Mam nadzieję że to pomoże


3

Wyświetl i sprawdź ścieżki referencyjne w swoim csproj.

Usunąłem odniesienia do System.Web.Mvc (i innych) i przeczytałem je na niestandardowej ścieżce. C:\Project\OurWebReferences

Jednak po wykonaniu tej czynności ścieżka referencyjna w wciąż csproj nie zmieniła się. BYŁ

<Reference Include="System.Web.Mvc, Version=4.0.0.1, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
  <SpecificVersion>False</SpecificVersion>
  <HintPath>..\..\..\..\OurWebProject\bin\Debug\System.Web.Mvc.dll</HintPath>
</Reference>

Zmieniono na ręcznie

<Reference Include="System.Web.Mvc, Version=4.0.0.1, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
  <SpecificVersion>False</SpecificVersion>
        <HintPath>..\..\..\..\OurWebReferences\System.Web.Mvc.dll</HintPath>
</Reference>

Ścieżki są tylko przykładem.


3

Dla mnie rozwiązaniem było upewnienie się, że wszystkie projekty budują dla tego samego procesora - w moim przypadku x86


2

Kopiuj lokalnie = prawda została rozwiązana dla jednego z moich projektów. Ale w innym projekcie dostaję ten sam błąd, próbowałem ustawić Copy Local = true, ale to nie rozwiązało mojego problemu. Zmiana struktury docelowej z 4.5.1 na 4.5 we właściwościach projektu Pomogło to.


2

Zrobiłem coś naprawdę głupiego (a może ty też).

Próbowałem zadzwonić System.Web.Mvc.Html.Partial("<Partial Page>")

System.Web.Mvc.Html to przestrzeń nazw, a nie klasa i nie przeczytałem tak dobrze komunikatu o błędzie, więc zinterpretowałem swój błąd jako klasę Html nie istnieje w przestrzeni nazw System.Web.Mvc i tak się skończyłem tutaj (głupio wiem).

Wszystko, co musiałem zrobić, to dodać instrukcję użytkowania @using System.Web.Mvc.Htmldo mojej strony, a następnie @Html.Partialdziałać zgodnie z oczekiwaniami.


Program Visual Studio 2015 oznaczy użycie jako niepotrzebne, ale jeśli pozwolisz na usunięcie, pojawi się błąd: „Typ lub nazwa przestrzeni nazw„ Pomocnicy ”nie istnieje w przestrzeni nazw„ Microsoft.Web ”(brakuje numer referencyjny zestawu?) ”.
justdan23

1

jeśli którykolwiek z powyższych problemów nie rozwiąże problemu, po prostu ustaw właściwości System.Web.Mvc.dll, aby skopiować lokalną sytuację.

rozwiąże się


1

Miałem ten sam problem, ale w moim przypadku powstał z innego powodu. Piszę to, aby pomóc innym ludziom z tym samym problemem. Mam rozwiązania z wieloma projektami. dwa z nich współpracują z System.Web.Mvc, zwykle naszym odniesieniem było wskazywanie na pakiety zewnętrzne, w których kontrolowaliśmy używaną wersję. Z jakiegoś powodu jedno z odniesień do projektu idzie do GAC i wskazuje na dll GAC (wersja 4.0.0.1) i program dostał błąd. Aby to poprawić:

Proste sprawdzenie, czy odwołania do System.Web.Mvc wskazują na tę samą bibliotekę DLL w tej samej ścieżce katalogu.

Mam nadzieję, że ta pomoc.


1

Usunąłem System.Web.dll z foldera Bin mojej witryny.


w moim przypadku tak. Zmieniłem się na starą gałąź bez MVC. I System.Web.dll w folderze Bin złamał mój bild.
andre719mv

1

Miałem ten problem, ustawienie kopiowania lokalnego włączania i wyłączania itp. Nie działało. Projekt nie korzystał z nugetu, więc poprawki, które również były wykluczone.

Rozwiązaniem było dla mnie zainstalowanie MVC 3 (co zrobiłem za pomocą instalatora platformy internetowej).

Podejrzewam, że stanie się to bardziej rozwiązaniem dla ludzi, ponieważ platforma .net nadal się rozwija i ludzie nie mają zainstalowanych starszych wersji MVC.


1

Możliwe, że ustawienie DLL na CopyLocal / true lub dowolne inne główne poprawki tego problemu naprawią twój problem, ale oto inny przypadek, który złapał mnie na 20 minut straconego czasu.

Kiedy dodajesz swoje przestrzenie nazw do Views / Web.config, upewnij się, że są poprawnie rozróżniane:

  <system.web.webPages.razor>
    <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
    <pages pageBaseType="System.Web.Mvc.WebViewPage">
      <namespaces>
        <add namespace="THE.NameSpace" />
        <add namespace="THE.Namespace" />
      </namespaces>
    </pages>
  </system.web.webPages.razor>

1

Ok, więc wiele osób wydaje się mieć ten problem. Mój problem został spowodowany przez odwołania mające ścieżki do folderów bin innych projektów lub odwołania dll z folderów systemowych. Projekt miał około 6 lat, a poprzedni programiści zdecydowali, że w ten sposób będą odwoływać się do swoich bibliotek.

Rozwiązaniem było przejrzenie każdego odwołania i sprawdzenie ścieżek, a następnie usunięcie odniesienia i dodanie go za pomocą NuGet. Dla każdego pakietu, który nie był w NuGet, utworzyłem inny folder obok pakietów i umieściłem tam bibliotekę DLL w takim samym układzie, jak NuGet.

Musiałem także przejrzeć pliki konfiguracyjne i upewnić się, że używana jest poprawna wersja pakietów. Długi i bolesny proces!


1

Mam projekt, który robi to za każdym razem, gdy buduję przy otwartym widoku. Gdy tylko zamknąłem widok, błąd zniknął i kompilacja się powiodła. Bardzo dziwny.


0

Miałem ten sam problem, żadne z rozwiązań nie zadziałało, w końcu usunąłem System.Web.MVCi dodałem ponownie. Potem wszystko wróciło do normy i mój problem został rozwiązany.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.