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

我最近开始跟随 这本指南将我的项目迁移到.NET 4.5.1和 Web Api 2。

微软开发者 Rick Anderson 要求你做的第一件事就是改变:

WebApiConfig.Register(GlobalConfiguration.Configuration);

GlobalConfiguration.Configure(WebApiConfig.Register);

然而,当我尝试构建:

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

我的项目目前在 MVC 5和 Web Api 2上。NET 4.5.1,但我认为系统。韦伯。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在同一依赖程序集的不同版本之间发现无法解决的冲突。当日志详细度设置为详细时,这些引用冲突将在生成日志中列出。

而摆脱那些强硬的束缚就是解决这个问题。

168721 次浏览

GlobalConfiguration类是 Microsoft.AspNet.WebApi.WebHost核心程序包的一部分... 您将这个程序包升级到 WebAPI 2了吗?

它需要 System.web.http.webhost,它是这个包的一部分:

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

或者在 Nuget https://www.nuget.org/packages/Microsoft.AspNet.WebApi.WebHost/5.1.0中搜索它

您可能需要检查您的项目是否安装了 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。您可以使用 NugetPackageManager 安装,也可以通过 PackageManager 控制台安装。要从包管理器控制台安装,请运行以下命令:

Install-Package Microsoft.AspNet.WebApi.WebHost

如果在卸载和安装 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 软件包管理器没有进行真正的更新,但是文件中包含了对旧版本的引用,所以我首先删除了所有已安装的 mvc 相关软件包(包括剃须刀和 web API) ,然后重新安装它们,并将 views/web.config 中剃须刀的版本更新到3.0版本。

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

  • 已经安装了 System.web.Http 5.2.2
  • 删除 Packages 文件夹和完全重新下载所有 NuGet 库没有任何作用
  • Config 已经有一个用于 System.Web.Http 的 DependentAssembly 条目

强制重新安装纠正了这个问题:

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

GlobalConfiguration. ConfigureAPI 可在“ Microsoft.AspNet.WebApi.WebHost”version = “5.2.3”中找到

而不是在“ Microsoft.AspNet.WebApi.WebHost”version = “4.0.0”中

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

这些方法对我都不管用。我有一大堆的 Nuget 软件包,由于循环依赖关系而无法更新。

我会用传统的方法解决这个问题。我创建了一个新的 MVC/web api 项目,并手动将 System.Web.HttpSystem.Web.Http.WebHost从新项目复制到现有解决方案的 Nuget 文件夹中。从那里我更新了参考,OMG,“浏览”和修复的问题。

以及使用包管理器控制台使得 nuget 使用 < strong > Install-Package Microsoft. AspNet. WebApi. WebHost 更新项目 因为缺少 全球配置,

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

这通过将名称空间添加到 Global.asax.cs 文件解决了这个问题。

使用 System.Web.Http;

这解决了问题。

安装-包 Microsoft.AspNet.WebApi.WebHost 解决了我的问题。