Тип или имя пространства имен не существует в пространстве имен 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и другие? Почему я получаю ошибку?


В папке «Ссылки» у меня есть 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 в Visual Studio 2012
J.Olufsen

1
Какова цель вашего проекта?
Даниэль А. Уайт


2
Зависит от того, кто ответит на этот вопрос - это все, что нужно некоторым из нас. Управление пакетами Nuget для решения ... >> Обновления
Том Стиккель,

Ответы:


420

Очистите свое решение и затем установите свойство этих файлов в Copy Local = True.

Чтобы установить для свойства Copy Local значение True или False

В обозревателе решений нажмите кнопку Показать все файлы, чтобы отобразить узел «Ссылки».

  • Откройте узел «Ссылки» для проекта.
  • Щелкните правой кнопкой мыши ссылку в списке «Ссылки» и выберите «Свойства». Свойства, связанные с этой ссылкой, отображаются в списке в окне «Свойства».
  • В окне «Свойства» измените свойство «Копировать локально» на «Истина» или «Ложь».

11
Потрясающие! Это исправило это для меня в проекте MVC4. Это очевидно, когда вы думаете об этом. Я никогда не смотрел на развернутый проект, чтобы увидеть, были ли там библиотеки DLL.
Алекс Килпатрик

1
Спасибо! Это помогло мне тоже!
Maritim

1
Пожалуйста. Иногда сложные проблемы решаются простым решением. :)
Ириска

5
Оно работает! Я просто изменил только одну ссылку =>System.Web.Mvc
Jaider

5
Мне понадобилось немного времени, чтобы понять, что означают эти файлы. Просмотрите ссылки на сборки для каждого проекта в решении, что-либо с «Microsoft ASP.NET \ ASP.NET MVC 3 \ Assemblies» и т. П. Является частью проблемы.
Задание

60

По какой-то причине у ДВУХ моих решений есть веб-проекты, которые каким-то образом самопроизвольно удаляли asp.net MVC. Я установил его из Nuget, и теперь они снова работают. Это произошло после недавнего обновления Windows, включающего обновления .net framework для версии, которую я использовал (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.
Винни Келли

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

1
MVC Copy local = true +1.
Stanomatic

4
То же самое случилось со мной. Пришлось установить MVC для копирования local = FALSE, перестроить, скопировать local = TRUE, перестроить. Все хорошо.
Jeppebm

38

Это обычно ловит меня, когда я запускаю из IIS, и пул приложений для сайта по умолчанию установлен на .NET версии 2.0. При использовании IIS из Visual Studio он создает виртуальный каталог, но по-прежнему работает в пуле приложений сайта по умолчанию. Если вы используете встроенный веб-сервер, щелкните правой кнопкой мыши на своем веб-проекте, перейдите в свойства и убедитесь, что вы используете его в нужной версии .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
Была такая же проблема, есть щедрость.
Nit

28

У меня была та же проблема - мой сценарий состоял в том, что я ссылался на новый System.Web.Mvc.dll из папки lib, и у меня не было «Копировать локальный», установленный в значение «истина». Затем приложение возвращалось к версии в GAC, в которой не было правильных пространств имен (Html, Ajax и т. Д.), И давала мне ошибку во время выполнения.


16

Мое решение было под Управление пакетами Nuget для решения ...». У меня было множество обновлений для нескольких пакетов.

Позвольте мне вернуться на полшага и сказать, что я облажался, потому что я переместил решение и проекты из одной папки в другую ... так что все уже вышло из-под контроля по сравнению с тем, что проектам казалось. Все прошло очень хорошо, но, видимо, Nuget запутается, если вы не используете другой подход, чем я.

Вернемся к решению ... Я просто пошел в Управление пакетами Nuget для решения ... >> Обновления >> Microsoft и .NET и нажал кнопку Обновить все .

Все вернулось на круги своя и счастливое.


Я опубликовал решение такого же типа, случайно пропустив ваш пост +1 для вас
Том Стиккель,

Это было исправлением и для меня.
Bradj

Обратите внимание, что вам также может понадобиться обновить JQuery и Bootstrap после этого
Carl Onager

Обновление пакетов nuget для mvc, razor и webpages помогло мне в проекте 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

Выполнение следующей команды в менеджере пакетов nuget исправило это для меня:

update-package microsoft.aspnet.mvc -reinstall

2
За это нужно проголосовать еще тысячу раз.
Chazt3n

1
@ Chazt3n У меня не сработало, но это хорошее предложение, так что + 1
Джаред Бич

Я попробовал все остальные методы, и технически с помощью диспетчера пакетов, удалил и переустановил и обновил, а что нет. Так что я был пессимистичен об этом ответе, но в отчаянии. Это сработало как-то.
Махеш

6

Этот ответ довольно поздно, учитывая дату вопроса, но кто-то может найти его полезным.

Ни одно из перечисленных выше решений не работало для меня в Visual Studio 2012 над локальным проектом, Net Framework 4.5 MVC 4. Для контекста я следовал учебному пособию по созданию базовых веб-интерфейсов API на CodeProject ( http://www.codeproject.com/ Статьи / 615805 / Создание чистого минимального следа ASP-NET-WebAPI ), когда я столкнулся с этой проблемой.

Что работало для меня, так это явное добавление «System.Web.Mvc» к ссылкам моего приложения, даже если приложение уже ссылалось на «System.Web».


Спасибо. Это решило мою проблему (хотя это было с DevExpress.Web.Mvc)
dferraro

+1. Я использую MvcSiteMapProvider и, так как он не работает с последними сборками MVC, я не смог выполнить «Обновить все» для пакетов Microsoft ASP.Net MVC через nuget. Еще одно предложение - вам, вероятно, нужно сделать «CopyLocal = True» для этой сборки.
user007 15.07.15

Просто нужно было перенести отладочное веб-приложение в новую среду. Необходимо добавить «скопировать локальный» в ссылку.
dudeNumber4

4

У меня была такая же проблема, но ничего из вышеперечисленного не помогло мне. Они действительно направили меня в правильном направлении, хотя.

Например, когда я устанавливаю «Copy Local» в «true» для ссылки System.Web.Mvc, он автоматически устанавливает значение «False».

У меня есть несколько проектов, которые зависят от ссылки 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 и указывает на DLL GAC (версия 4.0.0.1), и программа получила ошибку. Чтобы исправить это:

Просто проверьте, указывают ли ссылки на System.Web.Mvc на одну и ту же dll в том же пути к каталогу.

Я надеюсь, что это поможет.


1

Я удалил System.Web.dll из бин-фролдера моего сайта.


я в моем случае да. Я переключался на старую ветку без MVC. И System.Web.dll в папке Bin сломал мой билд.
andre719mv 30.09.15

1

У меня была эта проблема, установка локального копирования и выключения и т.д. не работала. В проекте не использовался nuget, поэтому исправлений вокруг этого также не могло быть и речи.

Для меня было исправлено установить MVC 3 (что я сделал через установщик веб-платформы).

Я подозреваю, что это станет более подходящим решением для людей, так как .net Framework продолжает развиваться, и у людей не установлены старые версии 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

Итак, многие люди, похоже, испытывают эту проблему. Моя проблема была вызвана ссылками, имеющими пути к папкам bin других проектов, или ссылками на dll из системных папок. Проекту было около 6 лет, и предыдущие разработчики решили, что именно так они будут ссылаться на свои библиотеки.

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

Мне также пришлось просмотреть файлы конфигурации и убедиться, что используется правильная версия пакетов. Долгий и мучительный процесс!


1

У меня есть проект, который делает это всякий раз, когда я строю с открытым View. Как только я закрыл представление, ошибка исчезает и сборка завершается успешно. Очень странно.


0

У меня была та же самая проблема, ни одно из решений не работало для меня, Наконец я удалил System.Web.MVCи добавил снова. Тогда все вернулось в норму, и моя проблема была решена.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.