Сайт перестав працювати в 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, версія = 2.0.0.0, культура = нейтральна, PublicKeyToken = 31bf3856ad364e35" у контексті "За замовчуванням" у місці "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, версія = 1.0.0.0, культура = нейтральна, PublicKeyToken = 31bf3856ad364e35' у контексті 'За замовчуванням' у місці розташування '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, версія = 2.0.0.0, культура = нейтральна, PublicKeyToken = 31bf3856ad364e35" у контексті "За замовчуванням" у місці "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, версія = 1.0.0.0, культура = нейтральна, PublicKeyToken = 31bf3856ad364e35' у контексті 'За замовчуванням' у місці розташування '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 на serer та на комп’ютері. Я намагався замінити його кодовою базою 15 днів, але існує та сама проблема.

тепер я хочу це вирішити. Хтось знає, як я можу це виправити.


Схоже, у вашому додатку деякі збори залежать від різних версій бритви. Спробуйте перевірити свої збори за допомогою ildasm або .NET Reflector, щоб побачити його залежності.
Paulo Morgado

Відповіді:


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, і не було посилань на залежність від збирання бритва, і 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, але не бритва. Зараз це працює. Дякую.
Ів Ткачик


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 (експрес або рідне), очистіть рішення, складіть і запустіть.


я думаю, що ця відповідь має бути відповіді фактично. Прив'язка до складання зазвичай нормальна при використанні підходу оновлення пакета до оновлення з mvc4 до mvc5.
Роман

34

На всякий випадок, якщо відповіді Яна не було достатньо (а збірки правильні, але кастинг все-таки неправильний), швидше за все, ви ще не оновили, <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

Рішення Ian працювало в одному проекті, але для інших мені потрібна більш повна інформація у розділі Як оновити до MVC 5 та Web API 2


Ця стаття зробила це для мене. Дякую!
gligoran

Я думаю, що ця стаття містить найбільш правильний і повний опис оновлення, дякую.
Михайло Бринчук

1

Ця проблема дуже часто зустрічається, коли ви розробляєте для MVC 4, а потім раптом встановлюєте пакет, який доступний у новій версії, щоб він порушив всю програму.

Єдине рішення такого питання - оновити всю програму до новішої або встановити старий пакет, сумісний з вашою програмою


1

Проблема:

[A] System.Web.WebPages.Razor.Configuration.HostSection не може бути передано до [B] System.Web.WebPages.Razor.Configuration.HostSection. Тип A походить від "System.Web.WebPages.Razor, версія = 2.0.0.0, культура = нейтральна, PublicKeyToken = 31bf3856ad364e35" у контексті "За замовчуванням" у місці "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, версія = 3.0.0.0, культура = нейтральна, PublicKeyToken = 31bf3856ad364e35" у контексті "за замовчуванням" у розташуванні "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.WebPagesPages , Версія = 3.0.0.0

Вам не потрібно робити перенаправлення або так, що це ускладнить справи.


0

Я знайшов проблему та рішення.

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

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


3
Чи можете ви бути більш конкретними?
nwayve

0

Відкрийте два файли dll у вашій системі, скопіюйте один dll у вашому файловому місці на інший
та спробуйте запустити проект.


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>
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.