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


148

我最近开始按照本指南进行操作,以将项目迁移到.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'不包含'Configure'的定义

我的项目目前在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发现了无法解决的相同从属程序集的不同版本之间的冲突。将日志详细程度设置为“详细”时,这些参考冲突会在构建日志中列出。

摆脱硬约束可以解决这个问题。


1
Microsoft.AspNet.Web.Helpers.Mvc先卸载了吗?
Blaise

看看我的答案stackoverflow.com/a/20653546/3114457它应该解决您的迁移问题
Livius 2013年

Answers:


271

它需要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才能继续进行。我还做了此页面上推荐的所有其他操作,因此不确定实际问题是什么。
Piotr Kula 2015年

6
那对我没用。该软件包已安装在我的项目中。
Shimmy Weitzhandler,2015年

有趣的是,Web主机已经安装并且仍无法正常工作,然后我GlobalConfiguration.Configure(WebApiConfig.Register);将Area.Registration之后在global.asax中插入的顺序更改为顶部,并且工作正常。
PedroSouki 2016年

为什么他们没有写类似的东西?我花了半个小时才能找到您的答案
Homayoun Behzadian

更新Microsoft.AspNet.WebApi.WebHost到最新版本后为我工作
Peter van Kekem '19

86

这些想法都没有使用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


1
我遇到了同样的问题,但是重新安装并没有解决它,至少看起来像那样,让我发疯了,我不得不重新启动VS2015并解决了问题。
Piotr Kula

似乎重新启动vs2013 +重新安装的组合为我解决了问题
Ram

43

GlobalConfiguration该类是Microsoft.AspNet.WebApi.WebHostnuget软件包的一部分...您已将此软件包升级到Web API 2吗?


1
是。版本5.0.0
nzondlo

1
您在web.config中碰巧有任何程序集绑定重定向吗?如果是的话,你可以分享他们...如果有任何有关System.Web.Http我特别期待*组件..
基兰Challa

我刚刚发布了所有程序集绑定。
nzondlo

30

除了使用Package Manager控制台获取nuget之外,还可以使用Install-Package Microsoft.AspNet.WebApi.WebHost更新 缺少丢失的GlobalConfiguration的项目

我需要安装,包装Microsoft.AspNet.WebApi.SelfHost失踪使用System.Web.Http;


1
你能解释更多吗?
Dieter Meemken '16

10

您可能要检查项目是否已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

5

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

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


3

如果在卸载和安装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)
Piotr Kula


1

我的问题是nuget软件包管理器没有进行真正的更新,但是文件包含对较早版本的引用,因此我首先删除了所有已安装的与mvc相关的软件包(包括razor和web api),然后重新安装了它们并更新了将views / web.config中的剃须刀升级到3.0.0版。


1

这些解决方案都不适合我。我纠结了Nuget软件包,由于彼此之间存在循环依赖性,它们无法更新。

我将不得不以老式方式解决此问题。我创建了一个新的MVC /网络API项目和手动复制System.Web.HttpSystem.Web.Http.WebHost从新项目到exisitng解决方案的的NuGet文件夹。从那里,我更新了OMG的参考,“浏览”并解决了问题。


0

通过将名称空间添加到Global.asax.cs文件中,可以解决此问题。

使用System.Web.Http;

这解决了问题。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.