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

StackOverflow https://stackoverflow.com/questions/2692007

  •  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 элемент.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top