O site parou de funcionar em asp.net System.Web.WebPages.Razor.Configuration.HostSection não pode ser convertido para

115

Estou com um problema como este no servidor

[A] System.Web.WebPages.Razor.Configuration.HostSection não pode ser convertido em [B] System.Web.WebPages.Razor.Configuration.HostSection. O Tipo A se origina de 'System.Web.WebPages.Razor, Version = 2.0.0.0, Culture = neutral, PublicKeyToken = 31bf3856ad364e35' no contexto 'Padrão' no local 'C: \ Windows \ Microsoft.Net \ assembly \ GAC_MSIL \ System .Web.WebPages.Razor \ v4.0_2.0.0.0__31bf3856ad364e35 \ System.Web.WebPages.Razor.dll '. O tipo B é originado de 'System.Web.WebPages.Razor, Version = 1.0.0.0, Culture = neutral, PublicKeyToken = 31bf3856ad364e35' no contexto 'Padrão' no local 'C: \ Windows \ Microsoft.Net \ assembly \ GAC_MSIL \ System .Web.WebPages.Razor \ v4.0_1.0.0.0__31bf3856ad364e35 \ System.Web.WebPages.Razor.dll '.

Descrição: Ocorreu uma exceção não tratada durante a execução da solicitação da web atual. Revise o rastreamento de pilha para obter mais informações sobre o erro e onde ele se originou no código.

Detalhes da exceção: System.InvalidCastException: [A] System.Web.WebPages.Razor.Configuration.HostSection não pode ser convertido em [B] System.Web.WebPages.Razor.Configuration.HostSection. O Tipo A se origina de 'System.Web.WebPages.Razor, Version = 2.0.0.0, Culture = neutral, PublicKeyToken = 31bf3856ad364e35' no contexto 'Padrão' no local 'C: \ Windows \ Microsoft.Net \ assembly \ GAC_MSIL \ System .Web.WebPages.Razor \ v4.0_2.0.0.0__31bf3856ad364e35 \ System.Web.WebPages.Razor.dll '. O tipo B é originado de 'System.Web.WebPages.Razor, Version = 1.0.0.0, Culture = neutral, PublicKeyToken = 31bf3856ad364e35' no contexto 'Padrão' no local 'C: \ Windows \ Microsoft.Net \ assembly \ GAC_MSIL \ System .Web.WebPages.Razor \ v4.0_1.0.0.0__31bf3856ad364e35 \ System.Web.WebPages.Razor.dll '.

Erro de fonte:

Instalei o MVC 3 no seridor e no meu computador. Tentei substituí-lo por uma base de código de 15 dias, mas existe o mesmo problema.

agora eu quero resolver isso. Alguém sabe como posso consertar.

user2632851
fonte
Parece que em seu aplicativo alguns assemblies têm dependências de diferentes versões do razor. Tente inspecionar seus assemblies com ildasm ou .NET Reflector para ver suas dependências.
Paulo Morgado

Respostas:

200

No Web.config raiz, certifique-se de que assemblyBinding contém a versão adequada para o assembly "System.Web.WebPages.Razor" e "System.Web.Mvc". Verifique sua existência real, bem como minha tag de montagem "System.Web.WebPages.Razor" estava faltando causando o erro. Eu tinha minhas versões de montagem definidas para 3.0 e 5.0 respectivamente no momento em que este artigo foi escrito com atualizações completas do NuGet. O código deve ser semelhante a abaixo. O publicKeyToken permanecerá o mesmo entre as versões. Felicidades!

<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>
Ian Flynn
fonte
2
Funcionou para mim. Eu estava faltando informações sobre o Razor e MVC apontou para a versão errada.
Hoakie
Mesma situação que @Hoakie - atualizou o Razor para 3.0.0 e o MVC para 5.0.0 e não havia nenhuma referência de montagem dependente do Razor e o MVC ainda dizia oldVersion = "1.0.0.0-4.0.0.0" newVersion = "4.0.0.0". Adicionado o XML do Razor DependentAssembly acima e alterado 4.0.0.0 para 5.0.0.0 e seu tio de Bob.
Scott Baker
2
Isso funcionou para mim, obrigado. Eu tinha "System.Web.WebPages" com as ligações corretas, mas não estava funcionando até que também adicionei a chave Razor. No entanto, em outros projetos eu não tive que fazer isso, não tenho certeza qual é a diferença e por que as ligações da superclasse não funcionariam para o Razor. Alguém sabe a resposta?
Shane
O mesmo aqui. Eu tenho a entrada MVC, mas não a Razor. Agora funciona. Obrigado.
Yves Tkaczyk
Isso funciona stackoverflow.com/questions/17454852/…
Rodolpho Brock
40

Meu caso estava atualizando de mvc4 para mvc5.

Certifiquei-me de que minhas referências estavam sincronizadas (com um aplicativo mvc5 recém-criado), atualizei o arquivo web.config de acordo e ainda não funcionou. Finalmente funcionou quando mudei meu arquivo web.config ( dentro do diretório VIEWS ) de:

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

Para isso:

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

LEMBRE-SE: pare o iis (expresso ou nativo), limpe a solução, crie e execute.

user3141889
fonte
Acho que essa resposta deveria ser uma resposta, na verdade. A vinculação do assembly é normalmente ok ao usar a abordagem de pacote de atualização para atualizar de mvc4 para mvc5.
Romano de
34

Para o caso de a resposta de ian não ter sido suficiente (e as montagens corretas, mas a fundição ainda está errada), é provável que você ainda não tenha atualizado o <configSections>para refletir a nova montagem. certifique-se de que a parte da montagem também faz referência à versão 3.0 da System.Web.WebPages.Razorbiblioteca. por exemplo

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

(Observe que todos eles fazem referência version=3.0.0agora)

Brad Christie
fonte
8
Eu apenas acrescentaria que, se você não conseguir encontrar essas configurações no Web.Config raiz, verifique também o Web.Config na pasta Views.
Gligoran
4
Sim, o problema era a pasta de visualizações web.config para mim.
Matthew Nichols
15

A solução de Ian funcionou em um projeto, mas para outros eu preciso de informações mais completas em How to Upgrade to MVC 5 and Web API 2

Ken Mc
fonte
Este artigo fez isso por mim. Obrigado!
Gligoran
Acho que este artigo contém a descrição de atualização mais correta e completa, obrigado.
Mikhail Brinchuk
1

Esse problema é muito comum quando você está desenvolvendo para MVC 4 e, de repente, instala um pacote que está disponível em uma versão mais recente, que quebra o aplicativo inteiro.

A única solução para esse problema é atualizar todo o seu aplicativo para um mais novo ou instalar o pacote antigo compatível com o seu aplicativo

ProgrammingNinja
fonte
1

Problema:

[A] System.Web.WebPages.Razor.Configuration.HostSection não pode ser convertido em [B] System.Web.WebPages.Razor.Configuration.HostSection. O Tipo A se origina de 'System.Web.WebPages.Razor, Version = 2.0.0.0, Culture = neutral, PublicKeyToken = 31bf3856ad364e35' no contexto 'Padrão' no local 'C: \ Windows \ Microsoft.Net \ assembly \ GAC_MSIL \ System .Web.WebPages.Razor \ v4.0_2.0.0.0__31bf3856ad364e35 \ System.Web.WebPages.Razor.dll '. O tipo B se origina de 'System.Web.WebPages.Razor, Version = 3.0.0.0, Culture = neutral, PublicKeyToken = 31bf3856ad364e35' no contexto 'Padrão' no local 'C: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ Arquivos ASP.NET temporários \ rbs.ceds.todomvcdemo \ 73d0b7c7 \ 46e3986d \ assembly \ dl3 \ 21020800 \ 101279fc_da94cf01 \ System.Web.WebPages.Razor.dll '.

Identificação:

O erro está no arquivo de configuração, ou seja, web.config do seu projeto.

Aqui você descobrirá que a versão do Razor está configurada para 2.0.0.0 onde, como no seu projeto, a versão 2.0.0.0 não está disponível.

Solução:

É simples, basta alterar a versão 2.0.0.0 para 3.0.0.0 e fará a mágica.

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 , Versão = 3.0.0.0

Você não precisa colocar redirecionamento ou então, pois isso tornará as coisas complicadas.

baseado em código
fonte
0

Encontrei um problema e solução.

1 Eu direciono meu código para 4.0 e, em seguida, carrego o código e está funcionando. Antes disso, também atualizo meu código para asp.net MVC 4.

agora é trabalho :)

user2632851
fonte
3
Você poderia ser mais específico?
quase
0

Abra a localização dos dois arquivos dll em seu sistema, copie uma das dll em seu local de arquivo para o outro
e tente executar o projeto.

user4287068
fonte
0

Outra maneira de corrigir isso, sem ter que atualizar as referências, é esta

  <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>
Fernando Gonzalez Sanchez
fonte