降级mvc项目时的剃刀版本错误

时间:2013-04-06 12:44:26

标签: asp.net-mvc-3 razor asp.net-mvc-4

我正在使用visual studio express 2012在mvc4上的一个网站上工作。由于我不打算进入这里的原因,我必须将项目移回mvc3 vs 2010.我已将所有代码移到并编译但是当我运行项目时,我收到以下错误。我不知道该怎么做。有谁猜?感谢。

  

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

     

描述:执行期间发生了未处理的异常   当前的网络请求。请查看堆栈跟踪了解更多信息   有关错误的信息以及它在代码中的起源。

     

异常详细信息: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'

在我的root web.config中,我有以下内容......

<appSettings>
    <add key="webpages:Version" value="1.0.0.0" />
    <add key="ClientValidationEnabled" value="true" />
    <add key="UnobtrusiveJavaScriptEnabled" value="true" />
  </appSettings>

然后在views文件夹中的web.config中我有...

<appSettings>
   <add key="webpages:Enabled" value="false" />
</appSettings>

2 个答案:

答案 0 :(得分:0)

没有看到你的web.config我不确定这是否正确。但是此错误消息指向webpages:config设置不正确。因此,请尝试以下方法:

在您的web.config中更改以下内容

<appSettings>
    ...
    <add key="webpages:Version" value="2.0.0.0" />
    ....
</appSettings>

<appSettings>
    ....
    <add key="webpages:Version" value="1.0.0.0" />
    ....
</appSettings>

更新

此错误的另一个可能原因是MVC4默认添加的绑定重定向,即

<dependentAssembly>
  <assemblyIdentity name="System.Web.Helpers" publicKeyToken="31bf3856ad364e35" />
  <bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="2.0.0.0" />
</dependentAssembly>
<dependentAssembly>
  <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
  <bindingRedirect oldVersion="1.0.0.0-4.0.0.0" newVersion="4.0.0.0" />
</dependentAssembly>
<dependentAssembly>
  <assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35" />
  <bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="2.0.0.0" />
</dependentAssembly>

请从您的web.config中删除上述内容并将其替换为

<dependentAssembly>
  <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
  <bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="3.0.0.0" />
</dependentAssembly>

答案 1 :(得分:0)

Penfold,谢谢你试图帮忙。虽然你的解决方案都没有解决,但他们指出了我正确的方向。我在视图的web.config文件中有两个块,它们是原始mvc4的剩余部分,需要更新到mvc3。我开始了一个新的mvc3项目并复制了默认值并且它有效。这是我改变的。

<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.Optimization"/>
        <add namespace="System.Web.Routing" />
      </namespaces>
    </pages>
  </system.web.webPages.razor>

我将上述内容改为此。

<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" />
      </namespaces>
    </pages>
  </system.web.webPages.razor>