Тип или имя пространства имен не существует в пространстве имен "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>