升级到MVC 5的网站缺少ControllerContext上的DisplayMode属性

时间:2013-11-13 13:35:43

标签: c# asp.net-mvc .net-4.0 .net-4.5 asp.net-mvc-5

我最近将我的网站更新为MVC 5.它在我的开发机器上运行良好。当我转移到支持.Net 4.0的共享主机上,我的MVC 4网站工作得很好。部署后,我收到了以下异常。

 Method not found: 'System.Web.WebPages.IDisplayMode
 System.Web.Mvc.ControllerContext.get_DisplayMode()'.

我尝试了一些问题来解决问题,但没有人帮忙。

  1. I检查文档是否DisplayMode是仅在MVC 5中添加的属性。我错了。它也存在于MVC 4中,并在msdn文档中进行了检查。
  2. 在MSDN上奇怪的事情,当我检查System.Web.Mvc.ControllerContext类型时,它指向我here。这里要注意的是当你将Framework版本更改为4.0时,它在ControllerContext上没有显示相同的属性。这感觉有点奇怪。
  3. 我的假设是.Net 4.5& MVC 5.0组合可能没有这种方法。

    我的装配绑定。

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

4 个答案:

答案 0 :(得分:8)

升级到MVC 5时遇到了同样的问题。

通过删除 Microsoft.Web.Mvc.FixedDisplayModes.dll 解决了这个问题。 dll是MVC4的旧版本,在使用MVC5时可以安全地删除它。

我从这里得到了这个解决方案:http://larre.fixstar.net/2014/10/sitecore-mvc-error-idisplaymode/

答案 1 :(得分:2)

为了将您的项目升级到MVC 5,我会确保您followed all the steps。另外,请检查以下内容:

  1. 您在web.config中有正确的程序集绑定重定向。
  2. 您的views文件夹中的web.config指向System.Web.WebPages程序集的正确版本(应为3.0.0.0)。
  3. 您已在项目中将新的MVC 5项目(System.Web.WebPages,System.Web.Mvc,System.Web.Helpers等)设置为Copy Local = True。
  4. 另外,我相信MVC5是.NET 4.5,而不是4.0(但我找不到列出所需.NET版本的任何地方)。如果您的主机是.NET 4.0,这也可能是一个问题。

    可能是您的共享主机没有在服务器上的GAC中安装这些MVC 5项。因此,当MVC 4工作时,MVC 5因组装负载/匹配错误而失败。

答案 2 :(得分:2)

我没有足够的“声誉”来支持或添加评论,但Sankar的解决方案对我有用:

  

通过删除Microsoft.Web.Mvc.FixedDisplayModes.dll解决了这个问题。 dll是MVC4的旧版本,在使用MVC5时可以安全地删除它。

答案 3 :(得分:0)

在使用Nuget安装Elmah.MVC后,我在新的MVC 5项目上收到了相同的错误消息。似乎elmah安装在web.config中添加了以下部分:

<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
  <dependentAssembly>
    <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-5.0.0.0" newVersion="5.0.0.0" />
  </dependentAssembly>
</assemblyBinding>
</runtime>

当我评论此部分时,错误消失了,项目似乎运行正常。