Asp.net mvc 4 MVC4应用程序的目标是.NET4.0,但似乎需要.NET4.5才能运行

Asp.net mvc 4 MVC4应用程序的目标是.NET4.0,但似乎需要.NET4.5才能运行,asp.net-mvc-4,deployment,web-config,Asp.net Mvc 4,Deployment,Web Config,我问了一个问题,描述了我是如何得出这个结论的。我环顾了一下网络,发现了类似的问题,但没有一个问题能给我答案,也没有一个问题能让我离得足够近,让我能够一跃而起,将问题全部解决。我在Visual Studio 2012中开发的MVC 4应用程序以.NET 4.0框架为目标,因为我们的生产服务器目前无法升级到.NET 4.5。在VS 2012和我的本地IIS上,应用程序运行良好。然而,当我将它部署到我们的登台服务器(只有.NET4.0)时,它不会完全运行,尽管它确实显示了登录页面。但是,它不会显示注册

我问了一个问题,描述了我是如何得出这个结论的。我环顾了一下网络,发现了类似的问题,但没有一个问题能给我答案,也没有一个问题能让我离得足够近,让我能够一跃而起,将问题全部解决。我在Visual Studio 2012中开发的MVC 4应用程序以.NET 4.0框架为目标,因为我们的生产服务器目前无法升级到.NET 4.5。在VS 2012和我的本地IIS上,应用程序运行良好。然而,当我将它部署到我们的登台服务器(只有.NET4.0)时,它不会完全运行,尽管它确实显示了登录页面。但是,它不会显示注册表或忘记登录页面

我尝试过的事情:

  • 运行aspnet_regiis.exe-ir,尽管这不是必需的,因为我们已经有ASP.NET 4应用程序在运行-[绝望]
  • 在web.config、UrlRoutingModule-4.0中删除和添加
  • 确保了所有dll的目标.NET 4.0
  • 。。。我明天回去工作时会列出更多
  • 在我持续的故障排除工作中,我能够确定,在用户登录并通过身份验证后,引发的唯一错误是一个声明它无法找到错误目录中存在的我的错误页面的错误。修复后,它只显示错误页面,没有其他可用信息,只是我的帐户登录方法中发生了错误。我还检查了SQL Server,注意到测试用户的LastLogon字段正在更新,这验证了我与SQL和EF5的连接。此时,我添加了日志记录,并能够确定用户实际上已通过身份验证,但BaseController中负责将经过身份验证的用户路由到主页/索引页的代码似乎从未触发(请参阅完整代码)

    在花了几个小时试图隔离错误代码之后,我一时兴起,将.NET4.5安装到了登台服务器上,瞧,它按预期工作。我可以使用针对.NET4.5的东西吗?我使用的唯一其他插件是:

    • TwitterBootstrapMVC
    • Grid.MVC
    • 实体框架5.0
    • 。。。我明天回去工作时会列出更多
    以及其他几个JQuery插件,它们都不需要.NET4.5。如果有人能引导我走上正确的道路,帮助我解决这一挑战,我将不胜感激。我知道你们像我一样喜欢挑战。让我们看看是否有人能比我先弄明白这一点

    障碍的唯一用途是被克服。障碍对勇敢的人所做的一切,不是吓唬他们,而是挑战他们


    好吧,我发现出了什么问题。对于我的一些控制器,我需要一个额外的参数,并且我不想使用QueryString,因此我在我的RouteConfig中添加了一个额外的url参数:

    routes.MapRoute(
        name: "Default",
        url: "{controller}/{action}/{id}/{xid}",
        defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional, xid = UrlParameter.Optional }
    );
    

    我没有太多的时间来研究为什么这会在4.5而不是4.0中起作用,但当我找到它时,我会在这里发布一个解释或一个解释链接,以防万一有人发现自己陷入了类似的困境。如果读者有兴趣对此进行阐述,请随意。

    您已声明使用EF 5.0。可能您正在使用Net4.0不支持的一些功能,谢谢Stephen,这是一个很好的建议。不过,我正在EF5中首先使用代码,但我没有使用任何需要4.5的新功能,因为我在升级到VS 2012后开始了这个针对4.0的项目。一旦开始工作,我将对此进行验证,但我确信我没有使用Enum支持,我的应用程序也没有使用空间数据类型。我将尝试切换到EF4.3,看看结果是否不同。再次感谢斯蒂芬。
    routes.MapRoute(
        name: "Default",
        url: "{controller}/{action}/{id}/{xid}",
        defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional, xid = UrlParameter.Optional }
    );