Ім'я типу або простору імен не існує в просторі імен 'System.Web.Mvc'


217

Побудова рішення MVC3 пройшла добре, але в браузері з’явилася помилка:

Повідомлення про помилку компілятора: CS0234: Тип або ім’я простору імен 'Html' не існує в просторі імен 'System.Web.Mvc' (не вистачає посилання на збірку?)

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" />

У мене встановлені пакети для рішення NuGetта налаштовані на всі проекти MVC3. Чи має MVC3включати бібліотеки System.Web.Mvc.Ajax, System.Web.Mvc.Htmlі інші? Чому я отримую помилку?


У папці References у мене є 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 Простір імен System.Web.Mvc

файл 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
який ваш веб-сервер? це в iis?
Даніель А. Уайт

Експрес IIS у Visual Studio 2012
J.Olufsen

1
на що встановлено ціль вашого проекту?
Даніель А. Білий


2
Залежить від того, хто стикається з цим питанням - це все, що потрібно для деяких із нас Управління пакунками з нуджетами для вирішення ... >> Оновлення
Том Стікель

Відповіді:


420

Очистіть своє рішення, а потім встановіть властивість цих файлів Copy Local = True.

Щоб встановити властивість Copy Local на значення True або False

У Провіднику рішень натисніть кнопку Показати всі файли, щоб відобразити вузол посилання.

  • Відкрийте вузол References для проекту.
  • Клацніть правою кнопкою миші посилання у списку літератури та натисніть Властивості. Властивості, пов'язані з цією посиланням, відображаються у списку у вікні "Властивості".
  • У вікні "Властивості" змініть властивість "Копіювати локальне" на "Істинне" або "Невірне".

11
Дивовижно! Це вирішило для мене проект MVC4. Це начебто очевидно, коли ти думаєш про це. Я ніколи не дивився на розгорнутий проект, щоб перевірити, чи є там DLL.
Алекс Кілпатрік

1
Дякую! Це мені теж допомогло!
Maritim

1
Ласкаво просимо. Іноді складні проблеми вирішуються простим рішенням. :)
Іриска

5
Це працює! Я просто System.Web.Mvc
змінюю

5
Трохи зайняв мене, щоб зрозуміти, що означають "ті файли". Перегляньте посилання на складання для кожного проекту в рішенні, що завгодно з проблемою є "Microsoft ASP.NET \ ASP.NET MVC 3 \ Асамблеї" тощо.
Завдання

60

З будь-якої причини ДВА моїх рішення мають веб-проекти, які спонтанно якимось чином видалили asp.net MVC. Я встановив його з Nuget, і тепер вони обидва знову працюють. Це сталося після недавньої партії оновлень Windows, яка включала оновлення .net для версії, яку я використовував (4.5.1).

Редагувати: З блогу .Net Веб-розробка та інструменти:

Microsoft Asp.Net MVC Оновлення безпеки MS14-059 зірвало мою збірку!


4
Це зі мною щойно трапилось. Однак я оновив свої пакети MVC замість того, щоб перевстановити їх (у мене все одно застаріли). Чи є джерело чи причина, чому це сталося?
Джошуа Н

5
Схоже, це стосується KB2994379 або KB2992080 , залежно від того, на яку версію MVC ви посилаєтесь (5.1 та 5.0 відповідно). Оновлення надає нову версію System.Web.Mvc, яку, я вважаю, представляє конфлікт версій. Оновлення пакету MVC виправить помилку. Якщо ви не можете оновити з будь-якої причини, вам потрібно встановити System.Web.Mvc.dll для копіювання локально.
Vinney Kelly

1
У мене була така ж проблема. Оновіть пакет і встановіть копію local = true. Дякую всім!!!!
Вакууп

1
MVC Копіювати локальний = true +1.
Станоматичний

4
Те саме сталося і зі мною. Довелося встановити MVC для копіювання local = FALSE, відновити, скопіювати local = TRUE, відновити. Все добре.
Jeppebm

38

Цей звичайно ловить мене під час запуску з IIS, а пул додатків для сайту за замовчуванням встановлений на .NET версії 2.0. Під час використання IIS від візуальної студії він створює віртуальний каталог, але все ще працює під пулом додатків сайту за замовчуванням. Якщо ви використовуєте збірку на веб-сервері, клацніть правою кнопкою миші на веб-проекті, перейдіть до властивостей і переконайтеся, що ви працюєте під правильною версією .NET. На IIS перевірте версію .NET у пулі додатків.

Випливаючи з мого останнього коментаря про те, як створено проект - чи правильно ви включаєте збірки, як показано нижче (взято з файлу web.config за замовчуванням, згенерованого шаблоном проекту MVC3 у 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
Усі проекти налаштовані на використання .NET Framework 4.5. Чи означає це, що .NET 4.5 не може знайти System.Web.Mvc.Ajax та інші класи?
J.Olufsen

Зазвичай це означає, що він встановлений як 4.5, але насправді працює як щось інше, що означає, що він не може знайти System.Web.Mvc.Ajax в System.Web.Mvc.
BlackSpy

Як убік, яка ваша версія System.Web.dll? Причина, яку я запитую, ви сказали, що ви додали збірки з NuGet - ви не створили веб-проект MVC3?
BlackSpy

31

Потрібно оновити MVC.

  1. Перейдіть до Інструменти -> Менеджер пакунків NuGet -> Керування пакетами NuGet для вирішення
  2. Клацніть на "Оновлення"
  3. Оновлення "Microsoft ASP.NET MVC"
  4. Перебудувати рішення

1
Використання пакету NuGet добре, проте ви можете завантажити багато інших збірок, які можуть не знадобитися, однак це виправить це.
полотно

1
Були ті ж проблеми, мати щедроту.
Ніт

28

У мене була така ж проблема - мій сценарій полягав у тому, що я посилався на новий System.Web.Mvc.dll з папки lib, і у мене не було "Copy Local", встановленого на true. Потім додаток повертається до версії в GAC, яка не мала в ньому правильних просторів імен (Html, Ajax тощо) і давала мені помилку часу запуску.


16

Моє рішення знаходилось під керуванням Nuget Packages for Solution ... - У мене було незрозумілі оновлення, які можна зробити для декількох пакетів.

Дозвольте зробити зворотний крок на півкроку і скажу, що я накрутив себе, тому що я переміщав рішення та проекти з однієї папки в іншу ... тож речі вже були невдалі порівняно з тим, де проекти думали. Все перейшло просто чудово, але, мабуть, Нугет заплутався, якщо не використовувати інший підхід, ніж я.

Повернення до рішення ... Я просто перейшов до керування Nuget пакетами для рішення ... >> Оновлення >> Microsoft та .NET і натиснув кнопку " Оновити все". .

Все повернулося до нормального та щасливого.


Я розмістив рішення одного типу, випадково пропустивши вашу публікацію +1 для вас
Том Стікель,

Це було виправленням і для мене.
bradj

Зауважте, що вам може знадобитися оновити JQuery і Bootstrap після цього
Carl Onager

Оновлення пакетів nuv пакетів mvc, бритви та веб-сторінок працювало для мене над проектом MVC5.
voam

9

Я завантажив проект mvc 5 і порушує проблему, на яку вказує

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

За допомогою цього повідомлення про помилку:

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

-> в якій я зайшов на цю веб-сторінку і спробував очистити і кілька речей вище тощо ...

Те, що працювало для мене, було саме для

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

1
О, я залишу свою публікацію, але я бачу, що azarc3 говорить те саме. відкликаючи його.
Том Стікел

7

Виконавши таку команду в диспетчері пакунків, виправив її:

update-package microsoft.aspnet.mvc -reinstall

2
На це потрібно звернутись ще близько тисячі разів.
Chazt3n

1
@ Chazt3n Мені не вийшло, але це гарна пропозиція, тому + 1
Джаред Біч

Я спробував усі інші методи, і технічно використовуючи менеджер пакунків, видалив та перевстановив та оновив, а що ні. Тож я був песимістичним щодо цієї відповіді, але відчайдушно. Це якось спрацювало.
Махеш

6

Ця відповідь є досить пізньою через дату питання, але хтось може вважати її корисною.

Жодне з перерахованих вище рішень не працювало для мене в Visual Studio 2012 над локальним проектом Net Framework 4.5 MVC 4. У контексті я слідкував за підручником по створенню безперервних веб-апі в CodeProject ( http://www.codeproject.com/ Статті / 615805 / Створення-чисте-мінімальне-слід-ASP-NET-WebAPI ), коли я зіткнувся з цією проблемою.

Що для мене працювало, явно додав "System.Web.Mvc" до посилань мого додатка, навіть якщо програма вже посилалася на "System.Web".


Дякую. Це вирішило мою проблему (я вважав, що це було з DevExpress.Web.Mvc)
вважав, що dferraro

+1. Я використовую MvcSiteMapProvider, і оскільки він не працює з останніми збірками MVC, я не міг зробити "Оновити все" для MVC-пакетів Microsoft ASP.Net через nuget. Ще одна пропозиція - вам, ймовірно, потрібно зробити "CopyLocal = True" для цієї збірки.
user007

Просто потрібно, щоб підключити веб-додаток для налагодження до нового середовища. Потрібно додати "копіювати локальний" до посилання.
dudeNumber4

4

У мене був той самий випуск, але жодне з перерахованого вище не працювало для мене. Хоча вони мене і направили в правильне русло.

Наприклад, коли я встановив "Копіювати локальний" на "справжній" для посилання System.Web.Mvc, він автоматично повертає його до помилкового.

У мене є кілька проектів, які залежать від посилання на System.Web.Mvc в моєму рішенні, але лише один викликав цю проблему. У VS 2012 ця посилання позначена жовтим трикутником уваги.

Знайдіть цю посилання => видаліть її => повторно додайте

Це зафіксувало це для мене. Сподіваюсь, це допомагає


3

Переглядайте та перевіряйте довідкові шляхи у своєму csproj.

Я видалив посилання на System.Web.Mvc (та інші) і перечитав їх на користувацький шлях. C:\Project\OurWebReferences

Однак, зробивши це, опорний шлях у нерухомому csproj не змінився. БУЛО

<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>

Змінено вручну

<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>

Шляхи - лише приклад.


3

Для мене рішенням було гарантувати, що всі проекти будуються для одного і того ж процесора - у моєму випадку x86


2

Копіювати Local = True було вирішено для одного з моїх проектів. Але в іншому проекті я отримую ту саму помилку, намагався встановити Copy Local = true, але це не вирішило мою проблему. З цим допомогла зміна рамки цілі з 4.5.1 до 4.5 у властивостях проекту.


2

Я зробив щось по-справжньому дурне (і, можливо, ви теж зробили).

Я намагався зателефонувати System.Web.Mvc.Html.Partial("<Partial Page>")

System.Web.Mvc.Html - це простір імен, а не клас, і я не так добре прочитав повідомлення про помилку, тому інтерпретував свою помилку як клас Html не існує в просторі імен System.Web.Mvc, і ось так я закінчився тут (дурно, я знаю).

Все, що мені потрібно було зробити, це додати @using System.Web.Mvc.Htmlна свою сторінку констатацію використання, а потім @Html.Partialпрацюю як слід.


Visual Studio 2015 позначить використання як не потрібне, але якщо ви дозволите його видалити, ви отримаєте помилки на кшталт: "Тип імені простору імен" Помічники "не існує в просторі імен" Microsoft.Web "(у вас немає посилання на збірку?) ".
justdan23

1

якщо будь-яке з перерахованих вище не вирішує вашу проблему, просто встановіть властивості System.Web.Mvc.dll для копіювання локальних даних.

це вирішить


1

У мене була така ж проблема, але в моєму випадку виник інший фактор. Я пишу це, щоб допомогти іншим людям з тією ж проблемою. У мене є рішення з кількома проектами. двоє з них працюють із System.Web.Mvc, зазвичай наша посилання вказувала на зовнішні пакети, де ми контролювали використану версію. Чомусь одна з посилань на проект переходить до GAC та вказує на dcl GAC (версія 4.0.0.1), і програма отримала помилку. Щоб виправити це:

Проста перевірити, чи посилання на System.Web.Mvc вказують на один і той же dll в тому ж шляху до каталогу.

Я сподіваюся, що допоможе.


1

Я видалив System.Web.dll з Finlder Bin мого сайту.


я мою справу так. Я переходив на старе відділення без MVC. І System.Web.dll у папці Bin зламав мій bild.
andre719mv

1

У мене виникла ця проблема, якщо налаштування локальної копії увімкнено і вимкнено і т.д. Проект не використовував «nuget», так що виправлень також не було.

Мені було виправлено встановлення MVC 3 (що я робив через інсталятор веб-платформи).

Я підозрюю, що це стане більше рішенням для людей, оскільки .net-рамка продовжує просуватися, і люди не мають встановлених старих речей MVC.


1

Цілком імовірно, що встановлення DLL на CopyLocal / true або будь-який з інших основних виправлень для цього виправить вашу проблему, але ось ще один крайній випадок, який зачепив мене за 20 хвилин даремно.

Коли ви додаєте простори імен до своїх Views / Web.config, переконайтеся, що вони правильно виконані:

  <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

Гаразд, багато людей, здається, відчувають це питання. Мою проблему викликали посилання, що мають шляхи до папок бін інших проектів, або посилання на dll із системних папок. Проекту було близько 6 років, і попередні розробники вирішили, що саме так вони збираються направляти свої бібліотеки.

Рішенням було пройти кожну посилання та перевірити шляхи, потім видалити посилання та додати її за допомогою NuGet. Для будь-якого пакета, який не був у NuGet, я створив ще одну папку поряд з пакунками і помістив туди dll у той самий макет, що і NuGet.

Я також повинен був пройти конфігураційні файли та переконатися, що використовується правильна версія пакетів. Довгий і болісний процес!


1

У мене є проект, який робить це кожного разу, коли я будую з відкритим видом. Щойно я закрив подання, помилка усувається і збірка вдається. Дуже дивно.


0

У мене була така ж проблема, жодне з рішень не працювало на мене, нарешті я видалив System.Web.MVCі додав знову. Потім все повернулося до норми і моя проблема була вирішена.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.