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.HttpSystem.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 中提供静态文件

将 Web 应用程序从 2.0 迁移到 3.5 框架的最快和最佳方法?

将 HttpModule .Net 类库移植到 .Net Core Web API