115

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

[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\assembly\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\assembly\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\assembly\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\assembly\GAC_MSIL\System .Web.WebPages.Razor\v4.0_1.0.0.0__31bf3856ad364e35\System.Web.WebPages.Razor.dll'。

源错误:

我已经在 serer 和我的计算机上安装了 MVC 3。我尝试用 15 天前的代码库替换它,但存在同样的问题。

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

4

9 回答 9

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>
于 2013-10-22T03:39:26.077 回答
40

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

我确保我的引用是同步的(与新创建的 mvc5 应用程序),相应地更新了 web.config 文件,但它仍然不起作用。当我从以下位置更改我的 web.config 文件(在 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(express 或 native),清理解决方案,构建并运行。

于 2014-02-02T17:32:11.993 回答
34

以防 ian 的回答不够(并且程序集正确,但铸造仍然错误),您可能还没有更新<configSections>以反映新程序集。确保程序集部分也引用System.Web.WebPages.Razor库的 3.0 版。例如

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

于 2013-10-28T20:16:09.693 回答
15

Ian's solution worked in one project, but for others I need the more complete info in How to Upgrade to MVC 5 and Web API 2

于 2013-11-21T19:48:32.547 回答
2

问题:

[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\assembly\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 \临时 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, 版本=3.0.0.0 type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor , 版本=3.0.0.0

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

于 2014-07-02T23:51:22.923 回答
1

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

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

于 2013-11-27T08:19:06.993 回答
0

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

1 我将我的代码定位到 4.0,然后上传代码,它就可以工作了。在此之前,我还将我的代码更新为 asp.net MVC 4。

现在它的工作:)

于 2013-07-31T01:22:00.983 回答
0

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

于 2014-11-24T10:26:24.120 回答
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>
于 2017-05-30T20:56:53.783 回答