【问题标题】:Asp.NET MVC 4 WebApi Upgrade - RC to 4.0.30506.0Asp.NET MVC 4 WebApi 升级 - RC 到 4.0.30506.0
【发布时间】:2013-06-12 03:07:22
【问题描述】:

当引入第一个生产版本 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 目录,而不是操作系统的 .NET 程序集
  • 确保项目引用设置为“复制本地”
  • 从 c:\windows\system32\inetsrv\ 和 c:\inetpub 中删除了 IIS 的临时文件
  • 运行 c:\Windows\Microsoft.NET\Framework\v4.0.30319\aspnet_regiis.exe
  • 通过 NuGet 更新了所有与 WebApi 相关的包
  • 停止并启动 IIS 和站点
  • 重新启动

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

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

【问题讨论】:

  • 您是否检查过该项目是指 System.Web.Http.WebHost.dll 和版本 4?
  • 有什么异常?
  • 是的,我验证了所有参考资料。
  • 对不起,我添加到帖子:找不到方法:'System.Web.Http.Services.DependencyResolver System.Web.Http.HttpConfiguration.get_ServiceResolver()'。
  • 你在使用依赖注入吗?

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


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多