Web API 2和.NET 4.5.1迁移后GlobalConfiguration.Configure()不存在

我最近开始遵循这个指南将我的项目迁移到.NET 4.5.1和Web Api 2。

MS开发人员Rick Anderson要求你做的第一件事就是改变:

WebApiConfig.Register(GlobalConfiguration.Configuration); 

 GlobalConfiguration.Configure(WebApiConfig.Register); 

在global.asax文件中。 然而,当我尝试构build时,这给了我一个错误:

错误1“System.Web.Http.GlobalConfiguration”不包含“configuration”的定义

我的项目目前在MVC 5和Web Api 2和.NET 4.5.1,但我认为System.Web.Http仍然认为它是.NEt 4.0版本。

我怎样才能解决这个问题?

谢谢。

编辑:

这是我的程序集绑定:

 <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <dependentAssembly> <assemblyIdentity name="System.Net.Http.Formatting" publicKeyToken="31BF3856AD364E35" culture="neutral"/> <bindingRedirect oldVersion="0.0.0.0-5.0.0.0" newVersion="5.0.0.0"/> </dependentAssembly> <!-- <dependentAssembly> <assemblyIdentity name="System.Web.Helpers" publicKeyToken="31bf3856ad364e35"/> <bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0"/> </dependentAssembly> <dependentAssembly> <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35"/> <bindingRedirect oldVersion="1.0.0.0-5.0.0.0" newVersion="5.0.0.0"/> </dependentAssembly> <dependentAssembly> <assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35"/> <bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0"/> </dependentAssembly> <dependentAssembly> <assemblyIdentity name="System.Web.Http" publicKeyToken="31bf3856ad364e35"/> <bindingRedirect oldVersion="1.0.0.0-5.0.0.0" newVersion="5.0.0.0"/> </dependentAssembly> <dependentAssembly> <assemblyIdentity name="System.Web.WebPages.Razor" publicKeyToken="31bf3856ad364e35"/> <bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0"/> </dependentAssembly> --> </assemblyBinding> 

在顶端被评论之后,所有的东西都被注释掉了,因为我得到了这个错误:

警告2发现不能解决的相同相关程序集的不同版本之间的冲突。 当日志详细程度设置为详细时,这些参考冲突在构build日志中列出。

摆脱硬绑定正在解决这个问题。

它需要system.web.http.webhost这是这个包的一部分。 我通过安装下面的包来解决这个问题:

 PM> Install-Package Microsoft.AspNet.WebApi.WebHost 

或者在nuget中searchhttps://www.nuget.org/packages/Microsoft.AspNet.WebApi.WebHost/5.1.0

这些想法都没有帮助我的项目使用MVC 5.2.2。

  • System.web.Http 5.2.2已经安装
  • 删除Packages文件夹并完全重新下载所有的Nu​​Get库没有做任何事情
  • Web.config已经有了System.Web.Http的dependentAssembly条目

强制重新安装纠正了这个问题。 从NuGet包pipe理器控制台:

update-Package -reinstall Microsoft.AspNet.WebApi.WebHost

GlobalConfiguration类是Microsoft.AspNet.WebApi.WebHost nuget包的一部分…您是否已将此包升级到Web API 2?

除了使用包pipe理器控制台来获取nuget以更新与安装程序包Microsoft.AspNet.WebApi.WebHost项目缺lessGlobalConfiguration项目

我需要安装包Microsoft.AspNet.WebApi.SelfHost缺less使用System.Web.Http;

您可能需要检查您的项目是否安装了Microsoft.AspNet.WebApi.WebHost 。 事实certificate,在我的情况下, Microsoft.AspNet.WebApi.WebHost安装在另一个项目,但不是需要它的特定项目。 在你的packages.config中,检查一下这样的一行:

 <package id="Microsoft.AspNet.WebApi.WebHost" version="5.1.1" targetFramework="net45" /> 

如果不存在,则您的项目中没有安装Microsoft.AspNet.WebApi.WebHost 。 您可以使用Nuget Package Manager或通过软件包pipe理器控制台进行安装。 要从软件包pipe理器控制台进行安装,请运行以下命令:

 Install-Package Microsoft.AspNet.WebApi.WebHost 

GlobalConfiguration.Configure API可在“Microsoft.AspNet.WebApi.WebHost”版本=“5.2.3”

而不是在“Microsoft.AspNet.WebApi.WebHost”版本=“4.0.0”

如果在卸载并安装Microsoft.AspNet.WebApi.WebHost之后仍然存在问题,那么还要在web.config中添加以下内容以便globalconfiguration工作

  <dependentAssembly> <assemblyIdentity name="System.Web.Http" publicKeyToken="31bf3856ad364e35" /> <bindingRedirect oldVersion="0.0.0.0-5.0.0.0" newVersion="5.2.0.0" /> </dependentAssembly> 

我的问题是,nuget软件包pipe理器没有做一个真正的更新,但文件包含对旧版本的引用,所以我第一次删除所有安装的mvc相关软件包(包括razor和网页api),然后再次安装它们,并更新版本在views / web.config中的剃刀到3.0.0版本。

“安装包Microsoft.AspNet.WebApi.Core”工作得很好。

这些解决scheme都不适合我。 我有一个Nuget包的纠结,因为彼此的循环依赖关系,无法更新。

我会不得不以老式的方式来修复这个问题。 我创build了一个新的MVC / web api项目,并将新项目中的System.Web.HttpSystem.Web.Http.WebHost手动复制到现有解决scheme的Nuget文件夹中。 从那里我更新了参考,OMG,“浏览”,并解决了这个问题。