安装了MVC 4测试版,现在我的MVC 3项目在重建所有项目时都会出错



我刚刚安装了MVC 4 Beta,现在我的MVC 3项目(我还没有转换为4)在重建所有项目时抛出了一个错误:

Error 18 [A]System.Web.WebPages.Razor.Configuration.HostSection cannot be cast to [B]System.Web.WebPages.Razor.Configuration.HostSection. Type A originates from 'System.Web.WebPages.Razor, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' in the context 'Default' at location 'C:WindowsMicrosoft.NetassemblyGAC_MSILSystem.Web.WebPages.Razorv4.0_1.0.0.0__31bf3856ad364e35System.Web.WebPages.Razor.dll'. Type B originates from 'System.Web.WebPages.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' in the context 'Default' at location 'C:WindowsMicrosoft.NetassemblyGAC_MSILSystem.Web.WebPages.Razorv4.0_2.0.0.0__31bf3856ad364e35System.Web.WebPages.Razor.dll'.

有人见过这个吗?谢谢

我花了一整天的时间试图解决这个问题,在一个下午之后,除了一个基本视图和一个基本控制器之外,我系统地从我的项目中删除了所有内容,但它仍然抛出了这个错误。所以我开始删除其他东西,发现在我的Views文件夹中有一个流氓Web.Config文件,里面有MVC 3的东西

在您的项目中搜索其他Web.Config文件!!!

我遇到了同样的问题,并能够如下解决:

  • 从项目引用中删除程序集System.Web.WebPages.Razor
  • 按解决方案上的"全部保存"
  • 再次添加程序集,确保选择版本1.0.0.0。在引用属性中选择"True"作为"特定版本"

我有一个解决方案:

您需要将其添加到mvc 3 web.config中:

    <configSections>
    <sectionGroup name="system.web.webPages.razor" type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
      <section name="host" type="System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
      <section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
    </sectionGroup>
    </configSections>
  <system.web.webPages.razor>
    <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
    <pages pageBaseType="System.Web.Mvc.WebViewPage">
      <namespaces>
        <add namespace="System.Web.Mvc" />
        <add namespace="System.Web.Mvc.Ajax" />
        <add namespace="System.Web.Mvc.Html" />
        <add namespace="System.Web.Routing" />
        <add namespace="System.Web.Helpers" />
        <add namespace="System.Web.WebPages" />
        <!-- Your namespace here -->
      </namespaces>
    </pages>
  </system.web.webPages.razor>

并从复制bin文件

C:Program Files (x86)Microsoft ASP.NETASP.NET MVC 3Assemblies
C:Program Files (x86)Microsoft ASP.NETASP.NET Web Pagesv1.0Assemblies

到您的项目bin文件夹

如果你需要在一台没有安装mvc 4的服务器上部署你的mvc 4项目,你需要在本节中从1.0.0.0版本更改为2.0.0.0版本。

祝你好运!

修复此问题的步骤

  1. 首先查找整个项目中的所有web.config文件
  2. 在所有web.config文件中,找到给定的"无法强制转换"错误代码,并在所有web..config文件的configSection中更改2.0.0.0版本System.Web.WebPages.Razor.Configuration.HostSection
  3. 如果再次出现错误,请查找该错误代码,并在所有web.config文件中更改2.0.0.0版本。重复此过程,直到修复与版本相关的问题

当您安装MVC4时,您的mvc3项目将指向2.0版的system.web.webpages。.

对于您的MVC3项目,删除对system.web.webpages 2.0版的引用,并添加回对system.web 1.0版的引用。

重新编译并重新部署,它应该会再次工作。。。

不确定它为什么这么做,但它仍然是一个测试版安装

以防其他人遇到同样的问题。看起来有几个不同的因素会导致这个特定的错误。这是对我发现的错误原因的最佳描述。在我的特定案例中,我通过NuGet添加了对库的引用,看起来好像在我的项目中添加了对System.Web.WebPages的特定引用。我删除了这个引用,重新构建,一切都很好。

祝其他有类似问题的人好运!

确保root/Web.configoot/Views/Web.config中对System.Web.WebPages的引用为2.0.0.0

如果所有内容都指向版本2,则验证您是否拥有目录"_bin_deployableAssemblies"。

如果有,请右键单击项目并选择选项"添加可部署依赖项…",然后检查MVC和Razor选项以更新DLL。

可能会帮助某人:

  1. 在razor 1.0和2.0之间添加了DLL conlfic的正确版本
  2. 修改了web.config文件,其中表示3.0到4.0,1.0到2.0仅适用于MVC和razor
  3. 另一个隐藏在视图下的web.config也需要修改

以上三个步骤有助于解决这个问题。

问题是Views目录中可能有另一个web.config,其最近值指向旧组件。当项目加载时,它会尝试加载两个版本,然后失败。

同时尝试更正"View’s"web.config上的版本。

对于迎面而来的人,就像我一样。

看起来您可能需要更新web.config中的一些程序集数据。

如果我们从mvc3升级到mvc4,看起来我们需要更改版本号。

我刚刚更改了webconfig,它在Views文件夹中。。。。需要更改版本号

<configuration>
  <configSections>
    <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>
  </configSections>
<system.web.webPages.razor>
    <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
    <pages pageBaseType="System.Web.Mvc.WebViewPage">
      <namespaces>
        <add namespace="System.Web.Mvc" />
        <add namespace="System.Web.Mvc.Ajax" />
        <add namespace="System.Web.Mvc.Html" />
        <add namespace="System.Web.Routing" />
      </namespaces>
    </pages>
  </system.web.webPages.razor>

 <pages
        validateRequest="false"
        pageParserFilterType="System.Web.Mvc.ViewTypeParserFilter, System.Web.Mvc, Version=**4**.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
        pageBaseType="System.Web.Mvc.ViewPage, System.Web.Mvc, Version=**4**.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
        userControlBaseType="System.Web.Mvc.ViewUserControl, System.Web.Mvc, Version=**4**.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
      <controls>
        <add assembly="System.Web.Mvc, Version=**4**.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" namespace="System.Web.Mvc" tagPrefix="mvc" />
      </controls>
    </pages>
  </system.web>

最新更新