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;

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