Witryna przestała działać w asp.net System.Web.WebPages.Razor.Configuration.HostSection nie można rzutować do


115

Mam taki problem na serwerze

[A] System.Web.WebPages.Razor.Configuration.HostSection nie może zostać przesłany do [B] System.Web.WebPages.Razor.Configuration.HostSection. Typ A pochodzi z „System.Web.WebPages.Razor, Version = 2.0.0.0, Culture = neutral, PublicKeyToken = 31bf3856ad364e35” w kontekście „Default” w lokalizacji „C: \ Windows \ Microsoft.Net \ assembly \ GAC_MSIL \ System .Web.WebPages.Razor \ v4.0_2.0.0.0__31bf3856ad364e35 \ System.Web.WebPages.Razor.dll '. Typ B pochodzi z „System.Web.WebPages.Razor, Version = 1.0.0.0, Culture = neutral, PublicKeyToken = 31bf3856ad364e35” w kontekście „Default” w lokalizacji „C: \ Windows \ Microsoft.Net \ assembly \ GAC_MSIL \ System .Web.WebPages.Razor \ v4.0_1.0.0.0__31bf3856ad364e35 \ System.Web.WebPages.Razor.dll '.

Opis: wystąpił nieobsługiwany wyjątek podczas wykonywania bieżącego żądania internetowego. Zapoznaj się ze śladami stosu, aby uzyskać więcej informacji o błędzie i miejscu jego powstania w kodzie.

Szczegóły wyjątku: System.InvalidCastException: [A] System.Web.WebPages.Razor.Configuration.HostSection nie może zostać przesłany do [B] System.Web.WebPages.Razor.Configuration.HostSection. Typ A pochodzi z „System.Web.WebPages.Razor, Version = 2.0.0.0, Culture = neutral, PublicKeyToken = 31bf3856ad364e35” w kontekście „Default” w lokalizacji „C: \ Windows \ Microsoft.Net \ assembly \ GAC_MSIL \ System .Web.WebPages.Razor \ v4.0_2.0.0.0__31bf3856ad364e35 \ System.Web.WebPages.Razor.dll '. Typ B pochodzi z „System.Web.WebPages.Razor, Version = 1.0.0.0, Culture = neutral, PublicKeyToken = 31bf3856ad364e35” w kontekście „Default” w lokalizacji „C: \ Windows \ Microsoft.Net \ assembly \ GAC_MSIL \ System .Web.WebPages.Razor \ v4.0_1.0.0.0__31bf3856ad364e35 \ System.Web.WebPages.Razor.dll '.

Błąd źródła:

Zainstalowałem MVC 3 na serwerze i na moim komputerze. Próbowałem zastąpić go 15-dniowym kodem źródłowym, ale istnieje ten sam problem.

teraz chcę to rozwiązać. Czy ktoś wie, jak mogę to naprawić.


Wygląda na to, że w Twojej aplikacji niektóre zestawy mają zależności od różnych wersji maszynki do golenia. Spróbuj sprawdzić swoje zestawy za pomocą ildasm lub .NET Reflector, aby zobaczyć ich zależności.
Paulo Morgado

Odpowiedzi:


200

W katalogu głównym Web.config upewnij się, że assemblyBinding zawiera poprawną wersję zestawu „System.Web.WebPages.Razor” i „System.Web.Mvc”. Sprawdź ich rzeczywiste istnienie, a także brak tagu zespołu „System.Web.WebPages.Razor”, co powoduje błąd. W czasie pisania tego tekstu moje wersje zestawu były ustawione na odpowiednio 3,0 i 5,0 z pełnymi aktualizacjami NuGet. Kod powinien wyglądać jak poniżej. PublicKeyToken pozostanie niezmieniony między wersjami. Twoje zdrowie!

<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
Pracował dla mnie. Brakowało mi informacji Razor, a MVC wskazał niewłaściwą wersję.
Hoakie

Taka sama sytuacja jak w przypadku @Hoakie - zaktualizowano Razor do 3.0.0 i MVC do 5.0.0 i nie było odniesienia do zespołu Razor zależnego, a MVC nadal powiedział, że oldVersion = "1.0.0.0-4.0.0.0" newVersion = "4.0.0.0". Dodano powyższy plik XML zespołu Razor zależny i zmieniono 4.0.0.0 na 5.0.0.0 oraz wuj Boba.
Scott Baker

2
To zadziałało dla mnie, dzięki. Miałem „System.Web.WebPages” z poprawnymi powiązaniami, ale nie działało, dopóki nie dodałem również klucza Razor. Jednak w innych projektach nie musiałem tego robić, nie jestem pewien, jaka jest różnica i dlaczego wiązania superklasy nie radzą sobie z Razorem. Czy ktoś zna odpowiedź?
Shane

To samo tutaj. Mam wpis MVC, ale nie Razor. Teraz działa. Dziękuję Ci.
Yves Tkaczyk


40

Mój przypadek przechodził z wersji mvc4 na mvc5.

Upewniłem się, że moje odwołania są zsynchronizowane (z nowo utworzoną aplikacją mvc5), odpowiednio zaktualizowałem plik web.config i nadal nie działał. W końcu zadziałało, kiedy zmieniłem plik web.config ( katalog INSIDE THE VIEWS ) z:

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

Do tego:

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

PAMIĘTAJ: zatrzymaj iis (ekspresowy lub natywny), wyczyść rozwiązanie, zbuduj i uruchom.


Myślę, że ta odpowiedź właściwie powinna być odpowiedzią. Powiązanie zestawu jest zwykle w porządku, gdy używasz podejścia update-package do aktualizacji z mvc4 do mvc5.
Roman

34

Na wypadek, gdyby odpowiedź iana nie była wystarczająca (a zespoły są poprawne, ale rzutowanie jest nadal błędne), prawdopodobnie nie zaktualizowałeś jeszcze, <configSections>aby odzwierciedlić nowy zespół. upewnij się, że część zestawu odwołuje się również do wersji 3.0 System.Web.WebPages.Razorbiblioteki. na przykład

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

(Zauważ, że wszystkie odnoszą się version=3.0.0teraz)


8
Dodam tylko, że jeśli nie możesz znaleźć tych ustawień w katalogu głównym Web.Config, sprawdź również Web.Config w folderze Views.
gligoran

4
Tak, problemem był dla mnie folder Widoki web.config.
Matthew Nichols


1

Ten problem jest bardzo powszechny, gdy tworzysz dla MVC 4, a następnie nagle instalujesz pakiet, który jest dostępny w nowszej wersji, więc psuje całą aplikację.

Jedynym rozwiązaniem takiego problemu jest aktualizacja całej aplikacji do nowszej lub zainstalowanie starego pakietu zgodnego z Twoją aplikacją


1

Problem:

[A] System.Web.WebPages.Razor.Configuration.HostSection nie może zostać przesłany do [B] System.Web.WebPages.Razor.Configuration.HostSection. Typ A pochodzi z „System.Web.WebPages.Razor, Version = 2.0.0.0, Culture = neutral, PublicKeyToken = 31bf3856ad364e35” w kontekście „Default” w lokalizacji „C: \ Windows \ Microsoft.Net \ assembly \ GAC_MSIL \ System .Web.WebPages.Razor \ v4.0_2.0.0.0__31bf3856ad364e35 \ System.Web.WebPages.Razor.dll '. Typ B pochodzi z „System.Web.WebPages.Razor, Version = 3.0.0.0, Culture = neutral, PublicKeyToken = 31bf3856ad364e35” w kontekście „Default” w lokalizacji „C: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ Temporary ASP.NET Files \ rbs.ceds.todomvcdemo \ 73d0b7c7 \ 46e3986d \ assembly \ dl3 \ 21020800 \ 101279fc_da94cf01 \ System.Web.WebPages.Razor.dll '.

Identyfikacja:

Błąd dotyczy pliku konfiguracyjnego, tj. Web.config twojego projektu.

Tutaj znajdziesz, że wersja Razor jest ustawiona na 2.0.0.0, gdzie wersja 2.0.0.0 projektu nie jest dostępna.

Rozwiązanie:

To proste, po prostu zmień wersję z 2.0.0.0 na 3.0.0.0 i zrobi magię.

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 , Wersja = 3.0.0.0

Nie musisz umieszczać przekierowania ani tak, ponieważ może to skomplikować sprawę.


0

Znalazłem problem i rozwiązanie.

1 Skieruję mój kod na 4.0, a następnie wgrywam kod i wszystko działa. Wcześniej zaktualizuję również mój kod do asp.net MVC 4.

teraz to działa :)


3
Możesz być bardziej dokładny?
nwayve

0

Otwórz lokalizację dwóch plików dll w systemie, skopiuj jedną bibliotekę dll w lokalizacji pliku do drugiej
i spróbuj uruchomić projekt.


0

Innym sposobem rozwiązania tego problemu bez konieczności aktualizowania odniesień jest to

  <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>
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.