Asp.NET MVC 4 WebApi升级 - RC到4.0.30506.0

时间:2013-06-15 16:54:10

标签: c# asp.net .net iis asp.net-web-api

我遇到了许多其他人似乎已经回来的问题,当第一个产品发布Asp.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目录,而不是os的.NET程序集
  • 确保项目引用设置为“复制本地”
  • 从c:\ windows \ system32 \ inetsrv \和c:\ inetpub
  • 中删除了IIS的临时文件
  • Ran c:\ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ aspnet_regiis.exe
  • 通过NuGet
  • 更新了所有与WebApi相关的软件包
  • 停止并启动IIS和网站
  • 重新启动

ServiceResolver方法不存在于普通的.NET System.Web.Http中,只存在于System.Web.Http的WebApi版本中,这就是为什么我认为它引用了错误的程序集。

我只是不知道还能做什么。任何帮助深表感谢。谢谢。

1 个答案:

答案 0 :(得分:1)

由于萨姆斯自己找到了答案,我将在这里作为官方答案发布。

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

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