我最近开始关注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发现无法解析的同一依赖程序集的不同版本之间发生冲突。当日志详细程度设置为详细信息时,这些引用冲突将在构建日志中列出。
并且摆脱硬绑定正在解决这个问题。
答案 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。
强制重新安装可以解决问题。从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.Http
和System.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;
这解决了问题。