Asp.NET MVC 4 WebApi Upgrade - RC to 4.0.30506.0

本文关键字:RC to 30506 Upgrade NET MVC WebApi Asp | 更新日期: 2023-09-27 18:18:28

我遇到了一个问题,很多人似乎在Asp. js第一次发布时就遇到了这个问题。. NET WebApi被引入,人们从发行候选版本升级到它…

我已经尝试了一天我在网上找到的每一个解决方案,但没有运气,尽管我现在对情况有了更好的了解,并认为我已经缩小了问题范围。

具体来说,似乎我的应用程序(无论是部署到我的本地IIS服务器,还是在开发服务器中运行)正在使用旧的System.Web.Http程序集。

Application_Start()方法的第二行失败并出现异常

protected void Application_Start()
{
    AreaRegistration.RegisterAllAreas();
    **WebApiConfig.Register(GlobalConfiguration.Configuration);**
    FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
    RouteConfig.RegisterRoutes(RouteTable.Routes);
    BundleConfig.RegisterBundles(BundleTable.Bundles);
}

从包含在模板中的WebApiConfig.cs文件/类中调用Register方法:

public static void Register(HttpConfiguration config)
{
    config.Routes.MapHttpRoute(
        name: "DefaultApi",
        routeTemplate: "api/{controller}/{id}",
        defaults: new { id = RouteParameter.Optional }
    );
}

,其中调用config.Routes.MapHttpRoute()会导致以下异常:

Method not found: 'System.Web.Http.Services.DependencyResolver System.Web.Http.HttpConfiguration.get_ServiceResolver()'.
Server stack trace: 
at System.Web.Http.GlobalConfiguration.<.cctor>b__0()
at System.Lazy`1.CreateValue()
Exception rethrown at [0]: 
at System.Web.Http.GlobalConfiguration.<.cctor>b__0()
at System.Lazy`1.CreateValue()
at System.Lazy`1.LazyInitValue()
at System.Lazy`1.get_Value()
at System.Web.Http.GlobalConfiguration.get_Configuration()
at MvcApplication2.WebApiApplication.Application_Start() 
in C:'Projects'TestArea'ASP_MVC'4'MvcApplication2'Global.asax.cs:line 21

到目前为止我所做的事情是:

  • 重新安装所有版本的。net
  • 从GAC中删除System.Web.Http
  • 确保项目引用指向WebApi目录,而不是操作系统的。net程序集
  • 确保项目引用被设置为"Copy Local"
  • 从c:'windows'system32'inetsrv'和c:'inetpub中删除IIS的临时文件
  • 跑c:'Windows' Microsoft.NET ' Framework ' v4.0.30319 ' aspnet_regiis.exe
  • 通过NuGet更新所有WebApi相关包
  • 停止和启动IIS和Site
  • 重启

ServiceResolver方法在正常的。net System.Web中不存在。Http,仅在System.Web的WebApi版本中。Http,这就是为什么我认为它引用了错误的程序集。

我只是不知道还能做什么。非常感谢任何帮助。谢谢你。

Asp.NET MVC 4 WebApi Upgrade - RC to 4.0.30506.0

既然Samus自己找到了答案,我就把它作为官方答案贴在这里。

我相信解决方案是检查输出窗口中加载的各种DLL,寻找仍在使用RC版本的版本,找到它们的位置并删除它们。

在他的情况下,这是因为RC显然在GAC中添加了一些DLL(这在MVC4的发布版本中不再这样做,因为它们都是bin部署的)。