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.


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>

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


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.


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)


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


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


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.


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


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.


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>
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.