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文件夹并完全重新下载所有的NuGet库没有做任何事情
- 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.Http
和System.Web.Http.WebHost
手动复制到现有解决scheme的Nuget文件夹中。 从那里我更新了参考,OMG,“浏览”,并解决了这个问题。