GlobalConfiguration.Configure() не отображается после переноса Web API 2 и .NET 4.5.1
Недавно я начал следовать этому руководству, чтобы перенести мой проект на .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.
Как я могу это исправить?
Спасибо.
Edit:
Вот мои привязки для сборки:
<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
Ему нужен файл system.web.http.webhost, который является частью этого пакета. Я исправил это, установив следующий пакет:
PM> Install-Package Microsoft.AspNet.WebApi.WebHost
или найдите его в nuget https://www.nuget.org/packages/Microsoft.AspNet.WebApi.WebHost/5.1.0
Ответ 2
Ни одна из этих идей не помогла моему проекту с использованием MVC 5.2.2.
- System.web.Http 5.2.2 уже установлен
- Удаление папки "Пакеты" и полная повторная загрузка всех библиотек NuGet ничего не сделали
- В Web.config уже была запись dependAssembly для System.Web.Http
Принудительная переустановка исправила проблему. С консоли диспетчера пакетов NuGet:
update-Package -reinstall Microsoft.AspNet.WebApi.WebHost
Ответ 3
GlobalConfiguration
class является частью пакета Microsoft.AspNet.WebApi.WebHost
nuget... Вы обновили этот пакет до Web API 2?
Ответ 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" версии = "5.2.3"
а не в "Microsoft.AspNet.WebApi.WebHost" version = "4.0.0"
Ответ 7
Если проблема остается после удаления и установки 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>
Ответ 8
"Установочный пакет Microsoft.AspNet.WebApi.Core" работал отлично.
Ответ 9
Моя проблема заключалась в том, что менеджер пакетов nuget не делал реального обновления, но файлы содержали ссылки на более старые версии, поэтому я сначала удалил все установленные пакеты, связанные с mvc (включая бритву и веб-api), затем снова установил их и обновил версия бритвы в views/web.config до версии 3.0.0.
Ответ 10
Ни один из этих решений не работал у меня. У меня была путаница пакетов Nuget, которые не могли обновляться из-за круговых зависимостей друг от друга.
Мне бы пришлось исправить это старомодно. Я создал новый проект MVC/web api и вручную скопировал System.Web.Http
и System.Web.Http.WebHost
из нового проекта в папки Nuget решения exisitng. Оттуда я обновил ссылки, OMG, "просматривал" и исправил проблему.
Ответ 11
попробуйте сопоставить приведенный ниже код в 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>
Ответ 12
это решило эту проблему, добавив пространство имен в файл Global.asax.cs.
используя System.Web.Http;
это решило проблему.