GlobalConfiguration.Configure () не отображается после миграции Web API 2 и .NET 4.5.1.

148

Я недавно начал следовать этому руководству, чтобы перенести мой проект на .NET 4.5.1 и Web Api 2.

Самое первое, что MS разработчик Рик Андерсон просит вас сделать, это изменить:

WebApiConfig.Register(GlobalConfiguration.Configuration);

в

GlobalConfiguration.Configure(WebApiConfig.Register);

в файле global.asax. Тем не менее, это дает мне ошибку, когда я пытаюсь построить:

Ошибка 1 «System.Web.Http.GlobalConfiguration» не содержит определения «Настройка»

Мой проект в настоящее время работает на 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 Обнаружены конфликты между различными версиями одной и той же зависимой сборки, которые не удалось разрешить. Эти конфликты ссылок перечислены в журнале сборки, когда подробность журнала установлена ​​на подробный.

и избавление от жестких привязок исправляло это.

nzondlo
источник
1
Вы Microsoft.AspNet.Web.Helpers.Mvcсначала удалили ?
Блейз
посмотрите на мой ответ stackoverflow.com/a/20653546/3114457 это должно исправить ваши проблемы с миграцией
Livius
5
Пожалуйста, отметьте stackoverflow.com/a/21514748/2343 как правильный ответ!
Самер Алибхай,

Ответы:

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, чтобы все заработало. Я также сделал все остальное, рекомендованное на этой странице, поэтому не уверен, в чем была проблема.
Петр Кула
6
Это не сработало для меня. Пакет уже установлен в моем проекте.
Шимми Вайцхандлер
Интересно было то, что веб-хост уже был установлен и все еще не работал, затем я изменил порядок, в котором он GlobalConfiguration.Configure(WebApiConfig.Register);был вставлен в global.asax, на верх сразу после AreaRegistration, и он работал просто отлично.
PedroSouki
почему они не написали что-то подобное? мне нужно полчаса, чтобы найти ваш ответ
Хомаюн Бехзадиан
Работал у меня после обновления Microsoft.AspNet.WebApi.WebHostдо последней версии
Питер ван Кекем
86

Ни одна из этих идей не помогла моему проекту с использованием MVC 5.2.2.

  • System.web.Http 5.2.2 уже установлен
  • Удаление папки Packages и повторная загрузка всех библиотек NuGet ничего не сделали
  • В файле Web.config уже есть запись зависимой сборки для System.Web.Http.

Принудительная переустановка исправила проблему. Из консоли диспетчера пакетов NuGet:

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

Чарльз Бернс
источник
1
У меня была та же проблема, но переустановка не устранила ее, по крайней мере, она выглядела так и сводила меня с ума, мне пришлось перезапустить VS2015, и она разобралась.
Петр Кула
Похоже, что комбинация перезагрузки vs2013 + переустановка решила проблему для меня
Ram
43

GlobalConfigurationкласс является частью Microsoft.AspNet.WebApi.WebHostпакета nuget ... Вы обновили этот пакет до Web API 2?

Киран Чалла
источник
1
Да. Это версия 5.0.0
nzondlo
1
у вас есть какие-либо перенаправления привязки сборки в вашем файле web.config? если да, не могли бы вы поделиться ими ... я специально ищу, есть ли какие-либо, связанные с сборками System.Web.Http * ..
Киран Чалла
Я только что опубликовал все свои сборочные привязки.
nzondlo
30

А также с помощью консоли диспетчера пакетов, чтобы получить nuget для обновления проекта с помощью Install-Package Microsoft.AspNet.WebApi.WebHost для отсутствующей GlobalConfiguration ,

Мне нужен был Install-Package Microsoft.AspNet.WebApi.SelfHost, отсутствующий при использовании System.Web.Http;

Tyeth
источник
1
Можете ли вы объяснить немного больше?
Дитер Мимкен
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"

user3508883
источник
3

Если проблема не устраняется после удаления и установки 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>
ratneshsinghparihar
источник
Это было уже в моем web.config. Все еще в выпуске (VS2015)
Петр Кула
2

«Install-Package Microsoft.AspNet.WebApi.Core» работал просто отлично.

Терри Мосома
источник
1

Моя проблема заключалась в том, что менеджер пакетов nuget не делал реального обновления, но файлы содержали ссылки на более старые версии, поэтому я сначала удалил все установленные пакеты, связанные с mvc (включая razor и web api), затем снова установил их и обновил версию бритва в views / web.config до версии 3.0.0.

Соника
источник
1

Ни одно из этих решений не помогло мне. У меня была путаница пакетов Nuget, которые не могли обновляться из-за циклических зависимостей друг от друга.

Мне бы пришлось исправить это по старинке. Я создал новый проект MVC апи / веб и вручную скопировать System.Web.Httpи System.Web.Http.WebHostиз нового проекта в папки NuGet из exisitng раствора в. Оттуда я обновил ссылки, OMG, "просмотр" и исправил проблему.

Мика Б.
источник
0

это решило эту проблему, добавив пространство имен в файл Global.asax.cs.

используя System.Web.Http;

это решило проблему.

user1661290
источник