Web API 2 和 .NET 4.5.1 迁移后不存在 GlobalConfiguration.Configure()
Posted
技术标签:
【中文标题】Web API 2 和 .NET 4.5.1 迁移后不存在 GlobalConfiguration.Configure()【英文标题】:GlobalConfiguration.Configure() not present after Web API 2 and .NET 4.5.1 migration 【发布时间】:2013-12-12 03:57:34 【问题描述】:我最近开始关注 this guide 将我的项目迁移到 .NET 4.5.1 和 Web Api 2。
MS 开发人员 Rick Anderson 要求您做的第一件事就是改变:
WebApiConfig.Register(GlobalConfiguration.Configuration);
到
GlobalConfiguration.Configure(WebApiConfig.Register);
在 global.asax 文件中。然而,当我尝试构建时,这给了我一个错误:
错误 1“System.Web.Http.GlobalConfiguration”不包含“配置”的定义
我的项目目前在 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 发现同一依赖程序集的不同版本之间存在无法解决的冲突。当日志详细程度设置为详细时,这些引用冲突会列在构建日志中。
摆脱硬绑定正在解决这个问题。
【问题讨论】:
你先卸载Microsoft.AspNet.Web.Helpers.Mvc
了吗?
看看我的回答 ***.com/a/20653546/3114457 它应该可以解决您的迁移问题
请将***.com/a/21514748/2343标记为正确答案!
【参考方案1】:
它需要 system.web.http.webhost 这是这个包的一部分。我通过安装以下软件包解决了这个问题:
PM> Install-Package Microsoft.AspNet.WebApi.WebHost
或在nuget中搜索https://www.nuget.org/packages/Microsoft.AspNet.WebApi.WebHost/5.1.0
【讨论】:
在我添加 API 控制器时自动添加。我必须重新启动 VS2015 才能运行。我还做了这个页面上推荐的所有其他事情,所以不确定实际问题是什么。 这对我不起作用。该软件包已安装在我的项目中。 有趣的是,webhost 已经安装并且仍然无法工作,然后我将GlobalConfiguration.Configure(WebApiConfig.Register);
在 global.asax 中插入的顺序更改为 AreaRegistration 之后的顶部,然后它工作得很好。
为什么他们没有写出类似的东西?我需要半个小时才能找到你的答案
在将Microsoft.AspNet.WebApi.WebHost
更新到最新版本后为我工作【参考方案2】:
这些想法都没有帮助我使用 MVC 5.2.2 的项目。
System.web.Http 5.2.2 已安装 删除 Packages 文件夹并完全重新下载所有 NuGet 库无济于事 Web.config 已经有 System.Web.Http 的dependentAssembly 条目强制重新安装更正了问题。从 NuGet 包管理器控制台:
update-Package -reinstall Microsoft.AspNet.WebApi.WebHost
【讨论】:
我遇到了同样的问题,但重新安装并没有解决它,至少它看起来像那样让我发疯,我不得不重新启动 VS2015 并解决了。 看起来重启 vs2013 + 重新安装的组合解决了我的问题【参考方案3】:GlobalConfiguration
类是 Microsoft.AspNet.WebApi.WebHost
nuget 包的一部分...您是否已将此包升级到 Web API 2?
【讨论】:
是的。它是 5.0.0 版 您的 web.config 中是否有任何程序集绑定重定向?如果是的话,你能分享一下吗……我特别想看看是否有任何与 System.Web.Http* 程序集相关的东西…… 我刚刚发布了我所有的程序集绑定。【参考方案4】:以及使用包管理器控制台获取 nuget 以使用 Install-Package Microsoft.AspNet.WebApi.WebHost 更新项目 对于缺少 GlobalConfiguration,
我需要 Install-Package Microsoft.AspNet.WebApi.SelfHost 来解决使用 System.Web.Http;
【讨论】:
你能再解释一下吗?【参考方案5】:您可能需要检查您的项目是否安装了Microsoft.AspNet.WebApi.WebHost
。事实证明,在我的情况下,Microsoft.AspNet.WebApi.WebHost
安装在另一个项目中,但不是需要它的特定项目。在您的 packages.config 中,检查是否有这样的行:
<package id="Microsoft.AspNet.WebApi.WebHost" version="5.1.1" targetFramework="net45" />
如果不存在,您的项目中没有安装Microsoft.AspNet.WebApi.WebHost
。您可以使用 Nuget 包管理器或通过包管理器控制台进行安装。要从包管理器控制台安装,请运行以下命令:
Install-Package Microsoft.AspNet.WebApi.WebHost
【讨论】:
【参考方案6】:GlobalConfiguration.Configure API 在 "Microsoft.AspNet.WebApi.WebHost" version="5.2.3" 中可用
而不是在 "Microsoft.AspNet.WebApi.WebHost" version="4.0.0"
【讨论】:
【参考方案7】:如果卸载并安装 Microsoft.AspNet.WebApi.WebHost 后问题仍然存在,那么还要在 web.config 中添加以下内容以使全局配置正常工作
<dependentAssembly>
<assemblyIdentity name="System.Web.Http" publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="0.0.0.0-5.0.0.0" newVersion="5.2.0.0" />
</dependentAssembly>
【讨论】:
这已经在我的 web.config 中了。仍然有问题(VS2015)【参考方案8】:“Install-Package Microsoft.AspNet.WebApi.Core”工作得很好。
【讨论】:
【参考方案9】:我的问题是 nuget 包管理器没有进行真正的更新,但文件包含对旧版本的引用,所以我首先删除了所有已安装的 mvc 相关包(包括 razor 和 web api),然后重新安装并更新将views/web.config 中的剃须刀版本改为3.0.0 版。
【讨论】:
【参考方案10】:这些解决方案都不适合我。由于相互之间的循环依赖,我有一堆无法更新的 Nuget 包。
我不得不以老式的方式解决这个问题。我创建了一个新的 MVC/web api 项目并手动将 System.Web.Http
和 System.Web.Http.WebHost
从新项目复制到现有解决方案的 Nuget 文件夹中。从那里我更新了引用,OMG,“浏览”并修复了问题。
【讨论】:
【参考方案11】:这通过将命名空间添加到 Global.asax.cs 文件解决了这个问题。
使用 System.Web.Http;
这解决了问题。
【讨论】:
以上是关于Web API 2 和 .NET 4.5.1 迁移后不存在 GlobalConfiguration.Configure()的主要内容,如果未能解决你的问题,请参考以下文章
我正在将我的 asp.net web api 迁移到 asp.net core。 Cors 迁移
要在 EF Core 中添加没有外键的导航属性,使用 .NET Core Web API 进行 DB-first 迁移
当我从数据库 Web Api .Net 中获取数据时的空列表
Web APi Vs MVC 和在 ASP.net 核心 Web APi 中提供静态文件