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


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'在上下文'Default'中的位置'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'在上下文'Default'中的位置'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'在上下文'Default'中的位置'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'在上下文'Default'中的位置'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天的旧代码库替换它,但是存在相同的问题。

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


好像在您的应用程序中,某些程序集与不同版本的剃刀有关。尝试使用ildasm或.NET Reflector检查程序集以查看其依赖性。
Paulo Morgado

Answers:


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>

2
为我工作。我缺少Razor信息,因此MVC指向错误的版本。
Hoakie 2013年

与@Hoakie相同的情况-将Razor更新为3.0.0,将MVC更新为5.0.0,并且没有RazordependentAssembly引用,并且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的yer叔叔。
斯科特·贝克

2
这对我有用,谢谢。我确实有带有正确绑定的“ System.Web.WebPages”,但是直到我还添加了Razor密钥后它才起作用。但是在其他项目中,我不必这样做,我不确定有什么区别,以及为什么超类绑定不能为Razor处理。有人知道答案吗?
Shane

同样在这里。我有MVC条目,但没有Razor条目。现在可以使用了。谢谢。
伊夫·特卡奇


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


我认为这个回应实际上应该是一个答案。当使用更新包方法从mvc4升级到mvc5时,程序集绑定通常是可以的。
罗马

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现在都已引用)


8
我要补充一点,如果您在根Web.Config中找不到这些设置,请同时在Views文件夹中检查Web.Config。
gligoran

4
是的,问题是我的Views文件夹web.config。
马修·尼科尔斯


1

在为MVC 4开发时突然出现此问题,然后突然安装了一个较新版本提供的软件包,因此它破坏了整个应用程序。

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


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'在上下文'Default'中的位置'C:\ Windows \ Microsoft.Net \ assembly \ GAC_MSIL \ System .Web.WebPages.Razor \ v4.0_2.0.0.0__31bf3856ad364e35 \ System.Web.WebPages.Razor.dll'。类型B源自位置为C:\ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319的``默认''上下文中的'System.Web.WebPages.Razor,Version = 3.0.0.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35' \临时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,Version = 3.0.0.0 type =” System.Web.WebPages.Razor.Configuration.RazorPagesSection,System.Web.WebPages.Razor ,版本= 3.0.0.0

您不需要放置重定向之类的东西,因为它会使事情变得复杂。


0

我找到了问题和解决方案。

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

现在工作了:)


3
你可以再详细一点吗?
2013年

0

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


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>
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.