InvalidCastException is thrown after installing ASP.NET MVC 4 Beta

試著忘記壹切 提交于 2019-11-30 01:06:39

Try adding the following in your web.config:

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

The issue might be due to multiple build providers being registered and the latest winning.

I had the same problem, but when migrating ASP.NET MVC 3 to ASP.NET MVC 4. This way I got on this topic. I have found a solution to the problem, but its source is different, it is not from WebPages version.

I have followed the official guide (so to say) Upgrading an ASP.NET MVC 3 Project to ASP.NET MVC 4.

To resolve the problem, you have to add in Web.Config (probably around previously added ones):

<runtime><!-- Should be there by default, near end -->
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"><!-- Should be there by default -->
    <dependentAssembly>..</dependentAssembly><!-- Should be there by default -->
        ... some other dependecy redirects ...

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

        ... some other dependency redirects ...
    </assemblyBinding>
</runtime>

Also in the notes is not mentioned to change the Reference of System.Web.Helpers from 1.0.0.0 to 2.0.0.0 (delete and add the new one).

One more, rather late, solution ... I ran into this same problem. Did all the fixes listed here (Thank You All!!!) but could not get past the error. Finally, in desperation, I found a web.config file in the Views directory. In this file, I found several references to the version of System.Web.Mvc and bumped all of them up to "4.0.0.0". More importantly, I found the following lines and updated the version numbers for "system.web.webPages.Razor" from "1.0.0.0" to "2.0.0.0" and suddenly, everything was working once again. Hopefully, this will help someone else.

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

Steve G.

laorient

I found another way of getting this to work, along the line to a Taiwanese's blog on upgrade from MVC 2 to MVC 3: http://blog.kkbruce.net/2011_04_01_archive.html (You can actually use Microsoft Translate in IE10 to see the English version and it is a fairly good translation...)

The trick is to find all the versions that relate to MVC3 (such as Razor, Mvc, Helper assemblies, you will know what they are if you go to your references and check out all the newer versions of your referenced assembly) and change them from 1.0.0.0 to 2.0.0.0 and from 3.0.0.0 to 4.0.0.0 (since the public keys are the same). You can also try removing the versions as per the blog.

Another important thing is that these settings are in all the Web.Configs. So not only under you root, but also under View, Area/{Area}/View, etc.

I feel this solution can let you upgrade to the MVC4 completely instead of having a hybrid, which didn't work for me anyways.

  1. In Visual Studio, create a new "throwaway" ASP.NET MVC 4 Application in a separate folder somewhere.
  2. Replace the web.config file in your Views folder with the freshly created Views web.config file from the new throwaway application.

You will notice:

System.Web.WebPages.Razor changes from Version=1.0.0.0 to Version=2.0.0.0 System.Web.Mvc changes from Version=3.0.0.0 to Version=4.0.0.0

If you are experiencing this issue and you have tried the solutions above and this not work, pls check the web.config in your Views folder. There may be some configurations their that is conflicting the Web.config file in your App root folder

Some of your code is running on the current MVC bits, while others have been pushed out to the newer. Without understanding the code, I can't tell you what specific bit is causing the issue.

Having said that, I would never set up a beta on a production development machine. It is too easy to create a VM these days and run the beta on an image. In Windows 7+, you can boot the image off the metal and not take the perf hit, if you need that (with dev tool betas, you oft do).

For the sake of completeness...

You can also just turn off webpages altogether if you aren't using them.

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

(I'm still not entirely clear on the relationship between razor views and webpages, but it seems my MVC app with razor views still works with webpages disabled.)

Also as last step clear your bin folder from the project where the error is coming from.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!