GlobalConfiguration.Configure () non presente dopo la migrazione dell'API Web 2 e .NET 4.5.1


148

Di recente ho iniziato a seguire questa guida per migrare il mio progetto su .NET 4.5.1 e Web Api 2.

La prima cosa che lo sviluppatore di MS Rick Anderson ti chiede di fare è cambiare:

WebApiConfig.Register(GlobalConfiguration.Configuration);

per

GlobalConfiguration.Configure(WebApiConfig.Register);

nel file global.asax. Eppure questo mi dà un errore quando provo a creare:

L'errore 1 "System.Web.Http.GlobalConfiguration" non contiene una definizione per "Configura"

Il mio progetto è attualmente su MVC 5 e Web Api 2 e .NET 4.5.1, ma penso che System.Web.Http continui a pensare che sia la versione .NEt 4.0.

Come posso risolvere questo problema?

Grazie.

Modificare:

Ecco i miei collegamenti di assemblaggio:

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

Tutto è stato commentato dopo che la parte superiore è stata commentata perché stavo ottenendo l'errore:

Avviso 2 Sono stati rilevati conflitti tra versioni diverse dello stesso assembly dipendente che non è stato possibile risolvere. Questi conflitti di riferimento sono elencati nel registro di build quando la verbosità del registro è impostata su dettagliata.

e sbarazzarsi degli attacchi duri lo stava risolvendo.


1
Hai disinstallato Microsoft.AspNet.Web.Helpers.Mvcprima?
Blaise,

guarda la mia risposta stackoverflow.com/a/20653546/3114457 dovrebbe risolvere i tuoi problemi con la migrazione
Livius

5
Contrassegna stackoverflow.com/a/21514748/2343 come risposta corretta!
Sameer Alibhai,

Risposte:


271

Ha bisogno del system.web.http.webhost che fa parte di questo pacchetto. Ho risolto questo problema installando il seguente pacchetto:

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

oppure cercalo in nuget https://www.nuget.org/packages/Microsoft.AspNet.WebApi.WebHost/5.1.0


È stato aggiunto automaticamente quando ho aggiunto un controller API. Ho dovuto riavviare VS2015 per farlo funzionare. Ho anche fatto tutto il resto consigliato in questa pagina, quindi non sono sicuro di quale fosse il problema reale.
Piotr Kula,

6
Non ha funzionato per me. Il pacchetto è già installato nel mio progetto.
Shimmy Weitzhandler,

È interessante notare che il webhost era già installato e non funzionava ancora, quindi ho cambiato l'ordine in cui è GlobalConfiguration.Configure(WebApiConfig.Register);stato inserito in global.asax in alto subito dopo la Registrazione Area e ha funzionato perfettamente.
PedroSouki,

perché non hanno scritto qualcosa del genere? ci vuole mezz'ora per trovare la tua risposta
Homayoun Behzadian,

Ha funzionato per me dopo l'aggiornamento Microsoft.AspNet.WebApi.WebHostall'ultima versione
Peter van Kekem il

86

Nessuna di queste idee ha aiutato il mio progetto con MVC 5.2.2.

  • System.web.Http 5.2.2 era già installato
  • L'eliminazione della cartella Pacchetti e il nuovo download completo di tutte le librerie NuGet non hanno comportato alcun effetto
  • Web.config aveva già una voce dependAssembly per System.Web.Http

Forzare una reinstallazione ha corretto il problema. Dalla console di gestione dei pacchetti NuGet:

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


1
Ho avuto lo stesso problema, ma la reinstallazione non l'ha risolto, almeno sembrava così e mi stava facendo impazzire, ho dovuto riavviare VS2015 ed è stato risolto.
Piotr Kula,

Sembra che la combinazione di restart vs2013 + reinstall abbia risolto il problema per me
Ram

43

GlobalConfigurationclass fa parte del Microsoft.AspNet.WebApi.WebHostpacchetto nuget ... Hai aggiornato questo pacchetto a Web API 2?


1
Sì. È la versione 5.0.0
nzondlo,

1
ti capita di avere dei reindirizzamenti dell'associazione dell'assembly nel tuo web.config? se sì, potresti condividerli ... Sto specificamente cercando se ci sono assemblee relative a System.Web.Http * ..
Kiran Challa,

Ho appena pubblicato tutti i miei collegamenti di assieme.
nzondlo,

30

Oltre a utilizzare la console di gestione pacchetti per ottenere il nuget per aggiornare il progetto con il pacchetto di installazione Microsoft.AspNet.WebApi.WebHost per GlobalConfiguration mancante ,

Avevo bisogno del pacchetto di installazione Microsoft.AspNet.WebApi.SelfHost per la mancanza di System.Web.Http;


1
Puoi spiegarci un po 'di più?
Dieter Meemken,

10

Potresti voler verificare che il tuo progetto sia Microsoft.AspNet.WebApi.WebHostinstallato. A quanto pare, nel mio caso, è Microsoft.AspNet.WebApi.WebHoststato installato in un altro progetto, ma non nel progetto particolare che ne aveva bisogno. Nel tuo package.config, controlla che ci sia una linea come questa:

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

Se ciò non è presente, non è stato Microsoft.AspNet.WebApi.WebHostinstallato nel progetto. Puoi installare utilizzando Nuget Package Manager o tramite la console di Package Manager. Per installare dalla console di Package Manager, eseguire questo comando:

Install-Package Microsoft.AspNet.WebApi.WebHost

5

L'API GlobalConfiguration.Configure è disponibile in "Microsoft.AspNet.WebApi.WebHost" version = "5.2.3"

e non in "Microsoft.AspNet.WebApi.WebHost" versione = "4.0.0"


3

Se il problema persiste dopo la disinstallazione e l'installazione di Microsoft.AspNet.WebApi.WebHost, aggiungere anche i seguenti in web.config affinché la configurazione globale funzioni

 <dependentAssembly>
        <assemblyIdentity name="System.Web.Http" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="0.0.0.0-5.0.0.0" newVersion="5.2.0.0" />
      </dependentAssembly>

Questo era già nel mio web.config. Ancora problema (VS2015)
Piotr Kula,


1

Il mio problema era che il gestore dei pacchetti nuget non faceva un vero aggiornamento ma i file contenevano riferimenti a versioni precedenti, quindi ho rimosso tutti i pacchetti relativi a mvc installati (inclusi rasoio e api web), quindi li ho installati di nuovo e aggiornando la versione di il rasoio in views / web.config alla versione 3.0.0.


1

Nessuna di queste soluzioni ha funzionato per me. Avevo un groviglio di pacchetti Nuget che non potevano essere aggiornati a causa delle dipendenze circolari tra loro.

Avrei dovuto risolvere il problema alla vecchia maniera. Ho creato un nuovo progetto api MVC / web e copiato manualmente System.Web.Httpe System.Web.Http.WebHostdal nuovo progetto nelle cartelle Nuget della soluzione esistente. Da lì ho aggiornato i riferimenti di, OMG, "sfogliando" e risolto il problema.


0

questo ha risolto il problema aggiungendo lo spazio dei nomi al file Global.asax.cs.

utilizzando System.Web.Http;

questo ha risolto il problema.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.