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

Posted

技术标签:

【中文标题】站点在 asp.net System.Web.WebPages.Razor.Configuration.HostSection 中停止工作无法转换为【英文标题】:Site stopped working in asp.net System.Web.WebPages.Razor.Configuration.HostSection cannot be cast to 【发布时间】:2013-07-30 05:56:18 【问题描述】:

我在服务器上遇到这样的问题

[A]System.Web.WebPages.Razor.Configuration.HostSection 无法转换 到 [B]System.Web.WebPages.Razor.Configuration.HostSection。 A型 源自'System.Web.WebPages.Razor,版本=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,版本=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 天前的代码库替换它,但存在同样的问题。

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

【问题讨论】:

似乎在您的应用程序中,某些程序集依赖于不同版本的 razor。尝试使用 ildasm 或 .NET Reflector 检查您的程序集以查看其依赖关系。 【参考方案1】:

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

【讨论】:

为我工作。我缺少 Razor 信息,并且 MVC 指向了错误的版本。 与@Hoakie 相同的情况 - 将 Razor 更新为 3.0.0,将 MVC 更新为 5.0.0,并且没有 Razor 依赖的Assembly 引用,并且 MVC 仍然说 oldVersion="1.0.0.0-4.0.0.0" newVersion ="4.0.0.0"。在上面添加了 RazordependentAssembly XML 并将 4.0.0.0 更改为 5.0.0.0 和 Bob 的你叔叔。 这对我有用,谢谢。我确实有具有正确绑定的“System.Web.WebPages”,但在我还添加了 Razor 密钥之前它不起作用。但是在其他项目中我不必这样做,我不确定有什么区别以及为什么超类绑定无法处理 Razor。有人知道答案吗? 这里也一样。我有 MVC 条目,但没有 Razor 条目。现在可以了。谢谢。 这工作***.com/questions/17454852/…【参考方案2】:

我的案例是从 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(express 或 native),清理解决方案,构建并运行。

【讨论】:

我认为这个回应实际上应该是一个答案。当使用 update-package 方法从 mvc4 升级到 mvc5 时,程序集绑定通常是可以的。【参考方案3】:

以防 ian 的回答不够(并且程序集正确,但转换仍然错误)您可能还没有更新 &lt;configSections&gt; 以反映新程序集。确保程序集部分还引用了 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

【讨论】:

我只是补充一点,如果您在根 Web.Config 中找不到这些设置,请检查 Views 文件夹中的 Web.Config。 是的,问题是我的 Views 文件夹 web.config。【参考方案4】:

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

【讨论】:

这篇文章是为我做的。谢谢! 我认为这篇文章包含了最正确最完整的升级说明,谢谢。【参考方案5】:

问题:

[A]System.Web.WebPages.Razor.Configuration.HostSection 无法转换 到 [B]System.Web.WebPages.Razor.Configuration.HostSection。 A型 源自'System.Web.WebPages.Razor,版本=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\Temporary 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

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

【讨论】:

【参考方案6】:

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

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

【讨论】:

【参考方案7】:

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

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

现在可以了:)

【讨论】:

你能说得更具体点吗?【参考方案8】:

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

【讨论】:

【参考方案9】:

另一种无需更新引用即可解决此问题的方法是

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

【讨论】:

以上是关于站点在 asp.net System.Web.WebPages.Razor.Configuration.HostSection 中停止工作无法转换为的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET 站点 - 在特定时间触发一些代码

如何在只有***元素的 asp.net 中制作基于站点地图的菜单?

将Asp.Net WebAPI从AngularJS App的Asp.Net MVC站点移动到一个单独的站点

如何在不停止站点的情况下更新 ASP.Net 站点 dll

如何从 ASP.NET 站点访问智能卡?

从站点地图和数据库填充 ASP.NET 菜单