Сайт перестал работать в asp.net. System.Web.WebPages.Razor.Configuration.HostSection не может быть преобразован в

115

У меня такая проблема на сервере

[A] System.Web.WebPages.Razor.Configuration.HostSection нельзя преобразовать в [B] System.Web.WebPages.Razor.Configuration.HostSection. Тип A происходит из System.Web.WebPages.Razor, Version = 2.0.0.0, Culture = нейтральный, PublicKeyToken = 31bf3856ad364e35 в контексте Default в расположении C: \ Windows \ Microsoft.Net \ assembly \ GAC_MSIL \ System .Web.WebPages.Razor \ v4.0_2.0.0.0__31bf3856ad364e35 \ System.Web.WebPages.Razor.dll. Тип B происходит из System.Web.WebPages.Razor, Version = 1.0.0.0, Culture = нейтральный, PublicKeyToken = 31bf3856ad364e35 в контексте Default в расположении C: \ Windows \ Microsoft.Net \ assembly \ GAC_MSIL \ System .Web.WebPages.Razor \ v4.0_1.0.0.0__31bf3856ad364e35 \ System.Web.WebPages.Razor.dll.

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

Сведения об исключении: System.InvalidCastException: [A] System.Web.WebPages.Razor.Configuration.HostSection нельзя преобразовать в [B] System.Web.WebPages.Razor.Configuration.HostSection. Тип A происходит из System.Web.WebPages.Razor, Version = 2.0.0.0, Culture = нейтральный, PublicKeyToken = 31bf3856ad364e35 в контексте Default в расположении C: \ Windows \ Microsoft.Net \ assembly \ GAC_MSIL \ System .Web.WebPages.Razor \ v4.0_2.0.0.0__31bf3856ad364e35 \ System.Web.WebPages.Razor.dll. Тип B происходит из System.Web.WebPages.Razor, Version = 1.0.0.0, Culture = нейтральный, PublicKeyToken = 31bf3856ad364e35 в контексте Default в расположении C: \ Windows \ Microsoft.Net \ assembly \ GAC_MSIL \ System .Web.WebPages.Razor \ v4.0_1.0.0.0__31bf3856ad364e35 \ System.Web.WebPages.Razor.dll.

Ошибка источника:

Я установил MVC 3 на сервере и на своем компьютере. Я попытался заменить его кодовой базой 15-дневной давности, но существует та же проблема.

теперь я хочу это решить. Кто-нибудь знает, как я могу это исправить.

user2632851
источник
Похоже, в вашем приложении некоторые сборки зависят от разных версий razor. Попробуйте проверить свои сборки с помощью ildasm или .NET Reflector, чтобы увидеть их зависимости.
Пауло Моргадо

Ответы:

200

В корневом файле Web.config убедитесь, что assemblyBinding содержит правильную версию для сборки «System.Web.WebPages.Razor» и «System.Web.Mvc». Проверьте их фактическое существование, а также отсутствие тега сборки "System.Web.WebPages.Razor", вызывающего ошибку. На момент написания этой статьи у меня были версии сборки 3.0 и 5.0 соответственно с полными обновлениями NuGet. Код должен выглядеть примерно так, как показано ниже. PublicKeyToken останется неизменным между версиями. Ура!

<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
  <!--some more bidings-->
  <dependentAssembly>
        <assemblyIdentity name="System.Web.WebPages.Razor"
            publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0"/>
  </dependentAssembly>

  <dependentAssembly>
    <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
    <bindingRedirect oldVersion="1.0.0.0-5.0.0.0" newVersion="5.0.0.0" />
  </dependentAssembly>
<!--some more bidings-->
</assemblyBinding>
Ян Флинн
источник
2
Работал у меня. Мне не хватало информации о Razor, а MVC указывал на неправильную версию.
Hoakie
Та же ситуация, что и @Hoakie - обновил Razor до 3.0.0 и MVC до 5.0.0, и не было ссылки на Razor independentAssembly, а MVC по-прежнему сказал oldVersion = "1.0.0.0-4.0.0.0" newVersion = "4.0.0.0". Выше добавлен XML-код зависимой сборки Razor и изменен с 4.0.0.0 на 5.0.0.0 и на дядю Боба.
Скотт Бейкер
2
Это сработало для меня, спасибо. У меня был «System.Web.WebPages» с правильными привязками, но он не работал, пока я также не добавил ключ Razor. Однако в других проектах мне не приходилось этого делать, я не уверен, в чем разница и почему привязки суперкласса не обрабатываются для Razor. Кто-нибудь знает ответ?
Шейн
Тоже самое. У меня есть запись MVC, но нет Razor. Теперь это работает. Спасибо.
Yves Tkaczyk 07
Это работает stackoverflow.com/questions/17454852/…
Родольфо Брок,
40

Мой случай обновлялся с mvc4 до mvc5.

Я убедился, что мои ссылки синхронизированы (с недавно созданным приложением mvc5), соответствующим образом обновил файл web.config, но он по-прежнему не работал. Наконец, это сработало, когда я изменил свой файл web.config ( INSIDE THE VIEWS directory ) с:

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

К этому:

<sectionGroup name="system.web.webPages.razor" type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
  <section name="host" type="System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
  <section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
</sectionGroup>

ПОМНИТЕ: остановите iis (экспресс или собственный), очистите решение, соберите и запустите.

user3141889
источник
я думаю, что этот ответ должен быть ответом на самом деле. Привязка сборки обычно подходит для обновления с mvc4 до mvc5 с использованием пакета обновления.
Роман
34

На всякий случай, если ответа ian было недостаточно (и сборки верны, но кастинг все еще неверен), скорее всего, вы еще не обновили, <configSections>чтобы отразить новую сборку. убедитесь, что часть сборки также ссылается на версию 3.0 System.Web.WebPages.Razorбиблиотеки. например

<sectionGroup name="system.web.webPages.razor" type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35">
    <section name="host" type="System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="false" />
    <section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="false" />
</sectionGroup>

(Обратите внимание, что все они ссылаются version=3.0.0сейчас)

Брэд Кристи
источник
8
Я бы просто добавил, что если вы не можете найти эти настройки в корневом Web.Config, проверьте также Web.Config в папке Views.
gligoran
4
Да, для меня проблема заключалась в папке Views web.config.
Мэтью Николс
15

Решение Яна работало в одном проекте, но для других мне нужна более полная информация в разделе Как перейти на MVC 5 и Web API 2.

Кен Мак
источник
Эта статья сделала это за меня. Спасибо!
gligoran
Думаю, эта статья содержит наиболее правильное и полное описание обновления, спасибо.
Михаил Бринчук 01
1

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

Единственное решение такой проблемы - обновить все ваше приложение до более новой или установить старый пакет, совместимый с вашим приложением.

ProgrammingNinja
источник
1

Проблема:

[A] System.Web.WebPages.Razor.Configuration.HostSection нельзя преобразовать в [B] System.Web.WebPages.Razor.Configuration.HostSection. Тип A происходит из System.Web.WebPages.Razor, Version = 2.0.0.0, Culture = нейтральный, PublicKeyToken = 31bf3856ad364e35 в контексте Default в расположении C: \ Windows \ Microsoft.Net \ assembly \ GAC_MSIL \ System .Web.WebPages.Razor \ v4.0_2.0.0.0__31bf3856ad364e35 \ System.Web.WebPages.Razor.dll. Тип B происходит из System.Web.WebPages.Razor, Version = 3.0.0.0, Culture = нейтральный, PublicKeyToken = 31bf3856ad364e35 в контексте Default в расположении C: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ Временные файлы ASP.NET \ rbs.ceds.todomvcdemo \ 73d0b7c7 \ 46e3986d \ assembly \ dl3 \ 21020800 \ 101279fc_da94cf01 \ System.Web.WebPages.Razor.dll '.

Идентификация:

Ошибка связана с файлом конфигурации, т.е. web.config вашего проекта.

Здесь вы обнаружите, что для версии Razor установлено значение 2.0.0.0, тогда как в вашем проекте версия 2.0.0.0 недоступна.

Решение:

Это просто, просто измените версию с 2.0.0.0 на 3.0.0.0, и все будет в порядке.

type = "System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version = 3.0.0.0 type =" System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor , Версия = 3.0.0.0

Вам не нужно устанавливать перенаправление или около того, так как это все усложнит.

codebased
источник
0

Я нашел проблему и решение.

1 Я нацеливаю свой код на 4.0, а затем загружаю код, и он работает. Перед этим я также обновил свой код до asp.net MVC 4.

теперь работа :)

user2632851
источник
3
Не могли бы Вы уточнить?
nwayve
0

Откройте расположение двух файлов dll в вашей системе, скопируйте одну из файлов dll из расположения вашего файла в другую
и попробуйте запустить проект.

user4287068
источник
0

Другой способ исправить это без обновления ссылок - это

  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="1.0.0.0-5.0.0.0" newVersion="3.0.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Web.Pages.Razor" publicKeyToken="31bf3856ad364e35" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-3.2.0.0" newVersion="1.0.0.0" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
Фернандо Гонсалес Санчес
источник