网站停止在asp.net中工作System.Web.WebPages.Razor.Configuration.HostSection无法转换为

时间:2013-07-30 07:41:31

标签: asp.net-mvc asp.net-mvc-4 c#-5.0

我在服务器上有这样的问题

  

[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 = neutral,PublicKeyToken = 31bf3856ad364e35'   位置处的“默认”   'C:\ WINDOWS \ Microsoft.Net \装配\ 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 = neutral,PublicKeyToken = 31bf3856ad364e35'   位置处的“默认”   'C:\的Windows \ Microsoft.Net \组件\ GAC_MSIL \ System.Web.WebPages.Razor \ v4.0_1.0.0.0__31bf3856ad364e35 \ System.Web.WebPages.Razor.dll'

描述:执行当前Web请求期间发生了未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。

  

异常详细信息: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 = neutral,PublicKeyToken = 31bf3856ad364e35'   位置处的“默认”   'C:\ WINDOWS \ Microsoft.Net \装配\ 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 = neutral,PublicKeyToken = 31bf3856ad364e35'   位置处的“默认”   'C:\的Windows \ Microsoft.Net \组件\ GAC_MSIL \ System.Web.WebPages.Razor \ v4.0_1.0.0.0__31bf3856ad364e35 \ System.Web.WebPages.Razor.dll'

来源错误:

我在serer和我的电脑上安装了MVC 3。我尝试用15天的代码库替换它,但存在同样的问题。

现在我想解决它。有人知道如何解决它。

9 个答案:

答案 0 :(得分:200)

在根Web.config中,确保assemblyBinding包含程序集“System.Web.WebPages.Razor”和“System.Web.Mvc”的正确版本。检查它们的实际存在以及我的“System.Web.WebPages.Razor”程序集标记丢失导致错误。在撰写完本NuGet更新时,我的汇编版本分别设置为3.0和5.0。代码应如下所示。 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>

答案 1 :(得分:40)

我的案例是从mvc4升级到mvc5。

我确保我的引用是同步的(使用新创建的mvc5应用程序),相应地更新了web.config文件,但仍然无效。 当我从以下位置更改我的web.config文件( INSIDE THE VIEWS目录)时,它终于奏效了:

<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(快速或本地),清理解决方案,构建和运行。

答案 2 :(得分:34)

以防万一ian的回答不够(并且程序集正确,但是转换仍然是错误的)可能你没有更新<configSections>以反映新的程序集。确保程序集部分也引用System.Web.WebPages.Razor库的3.0版。 e.g。

<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

答案 3 :(得分:15)

Ian的解决方案在一个项目中有效,但对于其他人,我需要How to Upgrade to MVC 5 and Web API 2

中更完整的信息

答案 4 :(得分:1)

当您为MVC 4开发时,此问题非常常见,然后突然安装了一个在较新版本中可用的软件包,因此它会破坏整个应用程序。

只有解决此问题的方法是将整个应用程序升级到更新版本或安装与您的应用程序兼容的旧软件包

答案 5 :(得分: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 = neutral,PublicKeyToken = 31bf3856ad364e35'   位置处的“默认”   'C:\ WINDOWS \ Microsoft.Net \装配\ 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 = neutral,PublicKeyToken = 31bf3856ad364e35'   位置处的“默认”   'C:\ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ Temporary ASP.NET   文件\ rbs.ceds.todomvcdemo \ 73d0b7c7 \ 46e3986d \组件\ 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即可实现神奇。

  

型=“System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup,   System.Web.WebPages.Razor,Version = 3.0.0.0   类型=“System.Web.WebPages.Razor.Configuration.RazorPagesSection,   System.Web.WebPages.Razor,Version = 3.0.0.0

您不需要重定向,因为它会使事情变得复杂。

答案 6 :(得分:0)

我发现了一个问题和解决方案。

1我将我的代码定位到4.0,然后上传代码并且它有效。在此之前,我还将我的代码更新为asp.net MVC 4。

现在它的工作:)

答案 7 :(得分:0)

打开系统中的两个dll文件位置,将文件位置中的一个dll复制到另一个文件位置 并尝试运行该项目。

答案 8 :(得分: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>