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

时间:2013-11-26 19:57:08

标签: c# asp.net-web-api asp.net-mvc-5 asp.net-4.5

我最近开始关注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'不包含'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发现无法解析的同一依赖程序集的不同版本之间发生冲突。当日志详细程度设置为详细信息时,这些引用冲突将在构建日志中列出。

并且摆脱硬绑定正在解决这个问题。

12 个答案:

答案 0 :(得分:264)

它需要system.web.http.webhost,它是此包的一部分。我通过安装以下软件包修复了这个问题:

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

或在nuget https://www.nuget.org/packages/Microsoft.AspNet.WebApi.WebHost/5.1.0

中搜索它

答案 1 :(得分:81)

这些想法都没有帮助我的项目使用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

答案 2 :(得分:43)

GlobalConfiguration类是Microsoft.AspNet.WebApi.WebHost nuget包的一部分...您是否已将此包升级到Web API 2?

答案 3 :(得分:27)

使用包管理器控制台让nuget使用安装包Microsoft.AspNet.WebApi.WebHost 更新项目 缺少 GlobalConfiguration

我需要安装 - 打包Microsoft.AspNet.WebApi.SelfHost ,以便使用System.Web.Http;

删除

答案 4 :(得分: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 Package Manager或通过Package Manager控制台进行安装。要从程序包管理器控制台进行安装,请运行以下命令:

Install-Package Microsoft.AspNet.WebApi.WebHost

答案 5 :(得分:5)

GlobalConfiguration.Configure API可用于&#34; Microsoft.AspNet.WebApi.WebHost&#34;版本=&#34; 5.2.3&#34;

而不是&#34; Microsoft.AspNet.WebApi.WebHost&#34;版本=&#34; 4.0.0&#34;

答案 6 :(得分:2)

如果卸载并安装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>

答案 7 :(得分:2)

“Install-Package Microsoft.AspNet.WebApi.Core”工作正常。

答案 8 :(得分:1)

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

答案 9 :(得分:1)

这些解决方案都不适合我。由于彼此之间的循环依赖,我有一堆无法更新的Nuget包。

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

答案 10 :(得分:0)

尝试匹配web.config中的以下代码,我发现了一些版本问题,并在匹配版本时修正了自己。

<system.web.webPages.razor>
    <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.2.2.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
    <pages pageBaseType="System.Web.Mvc.WebViewPage">
        <namespaces>
            <add namespace="System.Web.Helpers" />
            <add namespace="System.Web.Mvc" />
            <add namespace="System.Web.Mvc.Ajax" />
            <add namespace="System.Web.Mvc.Html" />
            <add namespace="System.Web.Routing" />
            <add namespace="System.Web.WebPages" />
            <add namespace="System.Web.UI.WebControls" />
        </namespaces>
    </pages>
</system.web.webPages.razor>

 <!-- and-->

<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
    <dependentAssembly>
        <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="0.0.0.0-5.2.2.0" newVersion="5.2.2.0" />
    </dependentAssembly>
</assemblyBinding>

答案 11 :(得分:0)

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

使用System.Web.Http;

这解决了问题。