Тип или имя пространства имен «Mvc» не существует в пространстве имен «System.Web».
-
01-10-2019 - |
Вопрос
После преобразования гибридного приложения ASP.NET MVC1 в MVC2 я получаю следующую ошибку при попытке запустить приложение:
Имя типа или пространства имен «Mvc» не существует в пространстве имен «System.Web» (вам не хватает ссылки на сборку?)
Предполагаемым виновником файла web.config является System.Web.Mvc:
<namespaces>
<add namespace="System.Web.Mvc"/>
<add namespace="System.Web.Mvc.Ajax"/>
<add namespace="System.Web.Mvc.Html"/>
На данный момент мое расследование, похоже, привело меня к выводу, что версия 2 System.Web.Mvc не установлена или не установлена.
Я попытался создать «Файл» > «Новый проект» на основе MVC 2 и выбрал новую (v2) версию MVC.Я также конвертировал некоторые другие проекты (которые не были гибридами), и они без проблем конвертировались в MVC2.
Я также удалил MVC1, чтобы попытаться удалить ссылки на него из GAC.Однако ничего из этого не сработало.
Есть идеи?
Решение
Убедитесь, что в вашем Web.config есть перенаправление привязки:
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35"/>
<bindingRedirect oldVersion="1.0.0.0" newVersion="2.0.0.0"/>
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Microsoft.Web.Mvc" />
</dependentAssembly>
</assemblyBinding>
</runtime>
Это приводит к принудительному использованию MVC 2, даже если MVC 1 находится на машине.
Также:MVC 1 имеет System.Web.Mvc
пространство имен, поэтому убедитесь, что у вас также есть:
<assemblies>
<add assembly="System.Web.Mvc, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
Другие советы
Я столкнулся с чем-то похожим, и решением было изменить ссылку на Microsoft.Web.Mvc, чтобы для параметра Copy Local было установлено значение True.
У меня была та же ошибка, и нажатие на ссылку подробной ошибки компиляции на странице показало проблемы с System.Web.Helpers
, .Http,
и .WebPages
.
После резервного копирования системы я запустил update-package -reinstall
' и принудительно удалить/переустановить все пакеты.Это заставило файл web.config быть правильно пересобран и dependentAssembly
секции построены правильно.
После восстановления решения оно запустилось в первый раз.
Обратите внимание: он добавил следующее плохое providers
раздел в файл web.config.
<contexts>
<context type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
</contexts>
<providers>
<provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
</providers>
Это генерирует только предупреждение о сборке, но я удалил его в пользу предыдущего. contexts
элемент.