Установленная MVC 4 Beta, теперь мои проекты MVC 3 вызывают ошибку, когда я перестраиваю все

Я только что установил бета-версию MVC 4, и теперь мои проекты MVC 3 (которые я еще не преобразовал до 4) бросают ошибку, когда я перестраиваю все:

Error 18 [A]System.Web.WebPages.Razor.Configuration.HostSection cannot be cast to [B]System.Web.WebPages.Razor.Configuration.HostSection. Type A originates from 'System.Web.WebPages.Razor, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' in the context 'Default' at location 'C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Web.WebPages.Razor\v4.0_1.0.0.0__31bf3856ad364e35\System.Web.WebPages.Razor.dll'. Type B originates from 'System.Web.WebPages.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' in the context 'Default' at location 'C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Web.WebPages.Razor\v4.0_2.0.0.0__31bf3856ad364e35\System.Web.WebPages.Razor.dll'.

Кто-нибудь еще сталкивался с этим? Спасибо!

Ответ 1

Я потратил весь день, пытаясь исправить это, и после того, как днем ​​систематически вырывал ВСЕ из моего проекта, кроме одного базового представления и одного базового контроллера, он все еще бросал эту ошибку. Поэтому я начал удалять другие вещи и обнаружил, что в папке "Мои", в которой содержались MVC 3, был файл с вредоносным Web.Config.

Поиск вашего проекта для других файлов Web.Config!!!

Ответ 2

У меня была такая же проблема, и я смог решить ее следующим образом:

  • Удалите сборку System.Web.WebPages.Razor из ссылок на проект.
  • Нажмите "Сохранить все" в решении
  • Добавьте сборку еще раз, убедитесь, что вы выбрали версию 1.0.0.0. В свойствах ссылки выберите True для конкретной версии.

Ответ 3

У меня есть решение для этого:

Вам нужно добавить это в свой mvc 3 web.config:

    <configSections>
    <sectionGroup name="system.web.webPages.razor" type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
      <section name="host" type="System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
      <section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
    </sectionGroup>
    </configSections>
  <system.web.webPages.razor>
    <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
    <pages pageBaseType="System.Web.Mvc.WebViewPage">
      <namespaces>
        <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.Helpers" />
        <add namespace="System.Web.WebPages" />

        <!-- Your namespace here -->
      </namespaces>
    </pages>
  </system.web.webPages.razor>

А также скопируйте файлы bin из

C:\Program Files (x86)\Microsoft ASP.NET\ASP.NET MVC 3\Assemblies
C:\Program Files (x86)\Microsoft ASP.NET\ASP.NET Web Pages\v1.0\Assemblies

в папку с вашим проектом.

Если вам нужно развернуть свой проект mvc 4 на сервере, на котором вы не установили mvc 4, вам нужно сделать то же самое, но изменить версию с 1.0.0.0 до 2.0.0.0 в разделе.

Удачи!

Ответ 4

Действия по устранению этой проблемы

  • Сначала найдите все файлы web.config в целом проекте
  • В любом файле web.config найдите данный код ошибки 'can not be cast' и измените версию 2.0.0.0 в configSections всех файлов web.config. System.Web.WebPages.Razor.Configuration.HostSection
  • снова, если появится ошибка, найдите этот код ошибки и измените версию 2.0.0.0 во всех файлах web.config. повторите этот процесс, пока не устраните проблемы, связанные с версией.

Ответ 5

Когда вы устанавливаете MVC4, ваши проекты mvc3 будут указывать на system.web.webpages ver 2.0..

Для проектов MVC3 удалите ссылку на system.web.webpages ver 2.0.. и добавьте ссылку обратно в system.web.webpages ver 1.0..

Перекомпилируйте и передислоцируйте, и он должен снова работать...

Не уверен, почему он это делает, но он все еще бета-версия

Ответ 6

На всякий случай кто-то сталкивается с этой проблемой. Похоже, что есть несколько разных вещей, которые могут вызвать эту конкретную ошибку. Это является лучшим описанием того, что вызывает ошибку, которую я нашел. В моем конкретном случае я добавил ссылку на библиотеку через NuGet, и похоже, что в мой проект была добавлена ​​специальная ссылка на System.Web.WebPages. Я удалил эту ссылку, перестроил, и все было хорошо.

Удачи другим с подобными проблемами!

Ответ 7

Убедитесь, что ссылки на System.Web.WebPages 2.0.0.0 в root/Web.config и root/Views/Web.config

Если каждая вещь указывает на версию 2, проверьте, есть ли у вас каталог " _bin_deployableAssemblies".

Если у вас есть это, затем щелкните правой кнопкой мыши на своем проекте и выберите вариант " Добавить расширяемые зависимости...", затем проверьте параметры MVC и Razor для обновления ваших DLL.

Ответ 8

Может помочь кому-то:

  • Добавлена ​​корректная версия DLL-совместимости между бризом 1.0 и 2.0
  • Изменен файл web.config, где он говорит от 3.0 до 4.0 и 1.0 до 2.0 только для MVC и бритвы
  • Другой web.config скрыт под видом, который также необходимо изменить.

Вышеуказанные три шага помогли решить проблему.

Ответ 9

Проблема в том, что у вас может быть другой файл web.config в каталоге представлений, в котором есть повторы, указывающие на старые сборки. Когда проект загружается, он пытается загрузить обе версии, а затем не работает.

Попробуйте также исправить версии в файле "View's" web.config.

Для встречного, как и я.

Ответ 10

Похоже, вам, возможно, придется обновить некоторые данные сборки в вашем web.config.

Ответ 11

Похоже, нам нужно изменить номер версии, если мы перейдем к mvc4 из mvc3.

Я только что изменил webconfig, который находится в папке Просмотры.... Необходимо изменить номер версии

<configuration>
  <configSections>
    <sectionGroup name="system.web.webPages.razor" type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
      <section name="host" type="System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
      <section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
    </sectionGroup>
  </configSections>
<system.web.webPages.razor>
    <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
    <pages pageBaseType="System.Web.Mvc.WebViewPage">
      <namespaces>
        <add namespace="System.Web.Mvc" />
        <add namespace="System.Web.Mvc.Ajax" />
        <add namespace="System.Web.Mvc.Html" />
        <add namespace="System.Web.Routing" />
      </namespaces>
    </pages>
  </system.web.webPages.razor>


 <pages
        validateRequest="false"
        pageParserFilterType="System.Web.Mvc.ViewTypeParserFilter, System.Web.Mvc, Version=**4**.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
        pageBaseType="System.Web.Mvc.ViewPage, System.Web.Mvc, Version=**4**.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
        userControlBaseType="System.Web.Mvc.ViewUserControl, System.Web.Mvc, Version=**4**.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
      <controls>
        <add assembly="System.Web.Mvc, Version=**4**.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" namespace="System.Web.Mvc" tagPrefix="mvc" />
      </controls>
    </pages>
  </system.web>