Тип или имя пространства имен не существует в пространстве имен "System.Web.Mvc"

Реализация решения 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

file 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

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

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

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

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

Ответ 2

По какой-то причине, два моих решения имеют веб-проекты, которые спонтанно удалили asp.net MVC каким-то образом. Я установил его из Nuget, и теперь они оба работают снова. Это произошло после недавней серии обновлений Windows, которые включали обновления среды .net для версии, которую я использовал (4.5.1).

Изменить: из блога .Net Web Development and Tools:

Microsoft Asp.Net MVC Security Update MS14-059 сломал мою сборку!

Ответ 3

Этот обычно меня ловит, когда я запускаюсь из 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>

Ответ 4

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

Ответ 5

Вам необходимо обновить MVC.

  • Перейдите в Инструменты → Диспетчер пакетов NuGet → Управление пакетами NuGet для решения
  • Нажмите "Обновления"
  • Обновление "Microsoft ASP.NET MVC"
  • Реконструкция решения

Ответ 6

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

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

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

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

Ответ 7

Я загрузил проект 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.

Ответ 8

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

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

Что для меня работало, явным образом добавлял "System.Web.Mvc" к моим ссылкам на приложения, хотя приложение уже ссылалось на "System.Web".

Ответ 9

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

update-package microsoft.aspnet.mvc -reinstall

Ответ 10

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

Например, когда я установил для параметра "Копировать локаль" значение "Истина" для ссылки System.Web.Mvc, он автоматически устанавливает его на False.

У меня есть несколько проектов, которые зависят от ссылки System.Web.Mvc в моем решении, но только одна из них вызвала эту проблему. В VS 2012 эта ссылка помечена желтым треугольником внимания.

Найти эту ссылку = > удалить it = > повторно добавить ее

Это исправило это для меня. Надеюсь, что это поможет

Ответ 11

Копировать локальный = True был разрешен для одного из моих проектов. Но в другом проекте я получаю ту же ошибку, попытался установить Copy Local = true, но это не решило мою проблему. Изменение целевой структуры с 4.5.1 до 4.5 в свойствах проекта. Помогло с этим.

Ответ 12

Просмотр и проверка ссылочных путей в вашем csproj.

Я удалил ссылки на System.Web.Mvc(и другие) и перечислил их на пользовательский путь. C:\Project\OurWebReferences

Однако после этого ссылочный путь в неподвижном csproj не изменился. WAS

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

Только пути являются примерами.

Ответ 13

Для меня решение заключалось в том, чтобы все проекты строились для одного и того же CPU - в моем случае x86

Ответ 14

Я сделал что-то действительно глупое (и, возможно, вы тоже).

Я пытался вызвать System.Web.Mvc.Html.Partial("<Partial Page>")

Ну, я вижу... System.Web.Mvc.Html - это пространство имен, а не класс, и я так не читал мое сообщение об ошибке, поэтому я интерпретировал свою ошибку, поскольку класс Html не существует в пространстве имен System.Web.Mvc и о том, как я оказался здесь (глупо я знаю).

Все, что мне нужно было сделать, это добавить оператор using @using System.Web.Mvc.Html на мою страницу, а затем @Html.Partial работал как ожидалось.

Ответ 15

если какой-либо из вышеперечисленных вопросов не решает вашу проблему, просто установите свойства System.Web.Mvc.dll для копирования локального файла.

он решает

Ответ 16

У меня была та же проблема, но в моем случае возникла другая причина. Я пишу это, чтобы помочь другим людям с той же проблемой. У меня есть решения с несколькими проектами. два из них работают с System.Web.Mvc. Обычно наша ссылка указывала на внешние пакеты, где мы контролировали используемую версию. По какой-то причине одна из ссылок на проект относится к GAC и указывает на dll GAC (версия 4.0.0.1), и программа получила ошибку. Чтобы исправить это:

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

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

Ответ 17

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

Ответ 18

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

Ответ 19

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

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

Я подозреваю, что это станет скорее решением для людей, так как инфраструктура .net продолжает развиваться, и у людей нет старых файлов MVC.

Ответ 20

Вероятно, что установка вашей DLL в CopyLocal/true или любые другие важные исправления для этого исправит вашу проблему, но вот еще один крайний случай, который заставил меня впустую на 20 минут.

Когда вы добавляете свои пространства имен в свои представления /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>