GlobalConfiguration.Configure () não presente após a migração da API da Web 2 e do .NET 4.5.1

148

Recentemente, comecei a seguir este guia para migrar meu projeto para o .NET 4.5.1 e o Web Api 2.

A primeira coisa que o desenvolvedor do MS, Rick Anderson, pede que você faça é mudar:

WebApiConfig.Register(GlobalConfiguration.Configuration);

para

GlobalConfiguration.Configure(WebApiConfig.Register);

no arquivo global.asax. No entanto, isso está me dando um erro quando tento criar:

Erro 1 'System.Web.Http.GlobalConfiguration' não contém uma definição para 'Configurar'

Atualmente, meu projeto está no MVC 5 e na Web Api 2 e .NET 4.5.1, mas acho que o System.Web.Http ainda acha que é a versão .NEt 4.0.

Como posso resolver isso?

Obrigado.

Editar:

Aqui estão as minhas ligações de montagem:

<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>

Tudo o que foi comentado após o topo foi comentado porque eu estava recebendo o erro:

Aviso 2 Foram encontrados conflitos entre versões diferentes do mesmo assembly dependente que não puderam ser resolvidos. Esses conflitos de referência são listados no log de construção quando a verbosidade do log é definida como detalhada.

e se livrar das amarras era consertar isso.

nzondlo
fonte
1
Você desinstalou Microsoft.AspNet.Web.Helpers.Mvcprimeiro?
Blaise
olhada na minha resposta stackoverflow.com/a/20653546/3114457 deve resolver seus problemas com a migração
Livius
5
Marque stackoverflow.com/a/21514748/2343 como resposta correta!
Sameer Alibhai

Respostas:

271

Ele precisa do sistema.web.http.webhost que faz parte deste pacote. Corrigi isso instalando o seguinte pacote:

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

ou procure-o no nuget https://www.nuget.org/packages/Microsoft.AspNet.WebApi.WebHost/5.1.0

Tyrone Moodley
fonte
Foi adicionado automaticamente quando adicionei um controlador de API. Eu tive que reiniciar o VS2015 para continuar. Também fiz tudo o mais recomendado nesta página, para não ter certeza de qual era o problema real.
Piotr Kula
6
Isso não funcionou para mim. O pacote já está instalado no meu projeto.
Shimmy Weitzhandler
O interessante foi que o host já estava instalado e ainda não estava funcionando. GlobalConfiguration.Configure(WebApiConfig.Register);Alterei a ordem em que o arquivo foi inserido no global.asax para o topo logo após o AreaRegistration e funcionou bem.
PedroSouki
por que eles não escreveram algo assim? que leva meia hora para me para encontrar a sua resposta
Homayoun Behzadian
Funcionou para mim depois de atualizar Microsoft.AspNet.WebApi.WebHostpara a versão mais recente
Peter van Kekem
86

Nenhuma dessas idéias ajudou meu projeto usando o MVC 5.2.2.

  • System.web.Http 5.2.2 já estava instalado
  • A exclusão da pasta Packages e o download completo de todas as bibliotecas NuGet não fizeram nada
  • Web.config já tinha uma entrada dependenteAssembly para System.Web.Http

Forçar uma reinstalação corrigiu o problema. No console do gerenciador de pacotes NuGet:

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

Charles Burns
fonte
1
Eu tive o mesmo problema, mas a reinstalação não o corrigiu, pelo menos parecia assim e estava me deixando louco, tive que reiniciar o VS2015 e resolveu o problema.
Piotr Kula
Parece que a combinação de reinício vs2013 + reinstalação resolvido o problema para mim
Ram
43

GlobalConfigurationclasse faz parte do Microsoft.AspNet.WebApi.WebHostpacote nuget ... Você atualizou este pacote para Web API 2?

Kiran Challa
fonte
1
Sim. É Versão 5.0.0
nzondlo 26/11/13
1
Você tem algum redirecionamento de ligação de assembly no seu web.config? Se sim, você pode compartilhá-los ... eu estou procurando especificamente se houver algum relacionadas com System.Web.Http * montagens ..
Kiran Challa
Acabei de publicar todas as minhas ligações de montagem.
Nzondlo
30

Além de usar o console do gerenciador de pacotes para obter um nuget para atualizar o projeto com o pacote de instalação Microsoft.AspNet.WebApi.WebHost por falta de configuração global ,

Eu precisava do Install-Package Microsoft.AspNet.WebApi.SelfHost por falta de uso System.Web.Http;

Tyeth
fonte
1
Você pode explicar um pouco mais?
Dieter Meemken
10

Você pode querer verificar se o seu projeto foi Microsoft.AspNet.WebApi.WebHostinstalado. Como se vê, no meu caso, Microsoft.AspNet.WebApi.WebHostfoi instalado em outro projeto, mas não no projeto específico que precisava dele. No seu packages.config, verifique se existe uma linha como esta:

<package id="Microsoft.AspNet.WebApi.WebHost" version="5.1.1" targetFramework="net45" />

Se isso não estiver presente, você não tem Microsoft.AspNet.WebApi.WebHostinstalado no seu projeto. Você pode instalar usando o Nuget Package Manager ou através do Console do Package Manager. Para instalar a partir do Console do Gerenciador de Pacotes, execute este comando:

Install-Package Microsoft.AspNet.WebApi.WebHost
Cameron Tinker
fonte
5

A API GlobalConfiguration.Configure está disponível em "Microsoft.AspNet.WebApi.WebHost" version = "5.2.3"

e não em "Microsoft.AspNet.WebApi.WebHost" version = "4.0.0"

user3508883
fonte
3

Se o problema persistir após a desinstalação e instalação do Microsoft.AspNet.WebApi.WebHost, adicione também os seguintes itens no web.config para que a configuração global funcione

 <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
fonte
Isso já estava no meu web.config. Ainda com problema (VS2015)
Piotr Kula
2

"Instalar o pacote Microsoft.AspNet.WebApi.Core" funcionou perfeitamente.

Terry Mosoma
fonte
1

Meu problema era que o gerenciador de pacotes nuget não fez uma atualização real, mas os arquivos continham referências a versões mais antigas, então removi primeiro todos os pacotes relacionados ao mvc instalados (incluindo razor e web api) e depois os instalei novamente e atualizando a versão do o razor em views / web.config para a versão 3.0.0.

Soniku
fonte
1

Nenhuma dessas soluções funcionou para mim. Eu tinha um emaranhado de pacotes Nuget que não puderam ser atualizados devido a dependências circulares entre si.

Eu teria que consertar isso da maneira antiga. Criei um novo projeto MVC / API API e copiei manualmente System.Web.Httpe System.Web.Http.WebHostdo novo projeto para as pastas Nuget da solução existente. A partir daí, atualizei as referências, OMG, "navegando" e resolvi o problema.

Micah B.
fonte
0

isso resolveu esse problema adicionando namespace ao arquivo Global.asax.cs.

using System.Web.Http;

isso resolveu o problema.

user1661290
fonte