2014-06-25 22 views
11

Solo cercando di unire un codice da un progetto di lavoro all'altro. Il progetto "from" utilizza "routing degli attributi" in cui si incorporano le direttive [Route(…)] nei moduli del controller dell'API Web per indicare quale messaggio HTTP deve instradare a quale routine di servizio."Impossibile trovare il nome del percorso o dello spazio dei nomi 'Percorso'" utilizzando "instradamento attributo"

Funziona bene nel progetto "da", ma nel progetto "a" viene visualizzato l'errore di compilazione "Impossibile trovare il tipo o il nome dello spazio dei nomi" Percorso "(manca una direttiva using o un riferimento all'assembly? "

Ho provato a copiare essenzialmente tutte le istruzioni using dal progetto" da "al progetto" a ", ma ciò non ha alcun effetto apparente. Nessuna documentazione MS suggerisce che sia necessario un pacchetto NuGet (o anche una dichiarazione using). Entrambi i progetti sono presumibilmente ASP.NET MVC 4.

(e, WebApiConfig.cs sì, ho aggiornato con la dichiarazione config.MapHttpAttributeRoutes();.)

Tutte le idee ??

+2

Credo di ricordare che sia una caratteristica API Web 2, ho pensato che era "in bundle" con i progetti MVC4 ... Scratch che penso confondersi. No ..... Sono a metà, prova Install-Package Microsoft.AspNet.WebApi.WebHost – brumScouse

+1

Ci sono così tante #% $ @ versioni che fluttuano in un progetto VS Non so cosa controllare. Entrambi i progetti importano il pacchetto NuGet di MVC 4. Oltre a questo non lo so. –

+1

OK, vedo che "from" importa il pacchetto Web API 2 mentre "to" importa l'API Web, niente. Vedrò se l'aggiornamento lo corregge o causa la fine dell'universo come lo conosciamo. –

risposta

15

attributo Routing è nativo in ASP.NET MVC 5 o versione successiva, e ASP.NET Web API 2.

Tuttavia, v'è un project that allows to use attribute routing it in previous version of ASP.NET MVC,and Web API. Dovresti leggere attentamente questa pagina.

Come si può vedere nella pagina collegata, questo progetto è disponibile come pacchetto NuGet, in modo che possa essere installato in questo modo:

  • Install-Package AttributeRouting (per MVC)
  • Install-Package AttributeRouting.WebApi (per il Web API)
  • Install-Package AttributeRouting.WebApi.Hosted (API Web per l'auto-ospitato)

prega, tenere presente che gli spazi dei nomi di attributi di routing sono diversi per ogni versione e per MVC e API Web. Quindi, devi cercare il file .dll incluso dal pacchetto installato per trovare il giusto spazio dei nomi e modificare di conseguenza il tuo using. Ad esempio:

using AttributeRouting.Web.Http; 
+0

Sfortunatamente, l'installazione del pacchetto AttributeRouting non rende i messaggi va via. (Ho un "using System.Web.Http.Routing;" nel modulo.) –

+0

Questo è logico. Lo spazio dei nomi è diverso. Devi essere sicuro di quale versione di Web API stai usando. Gli attributi da utilizzare dipendono dalle versioni (di MVC e Web API) e se si tratta di API Web, API Web ospitate autonomamente o MVC. – JotaBe

24

Questo commento di Vedran Mandić ha risolto il problema per me. Lo sto posticipando qui perché penso che dovrebbe essere la risposta (o almeno una risposta).

Ho fatto un 'pacchetto di aggiornamento Microsoft.AspNet.WebApi.WebHost -reinstall' e ha funzionato. Divertente questo succede dopo aver ottenuto l'ultima versione su PC diversi da TFS. Credo che questo accade a causa di pacchetti Nuget non funziona correttamente con il sistema di controllo delle versioni

+1

questo rocce. Lo stesso problema qui con TFS e nuget –

+0

Grazie mille per il suggerimento, ma personalmente odio questo tipo di correzione. Di solito comporta un sacco di colpi di testa, perdite di tempo e frustrazione. – Ads

4

Nel mio caso, nel progetto di Web API c'erano due usando i riferimenti:

using System.Web.Http; 
using System.Web.Mvc; 

Appena ho rimosso System.Web.Mvc, l'errore era sparito.

+0

Ancora errore. '[RoutePrefix (" xxx ")]' prendendo referance ma ancora '[Route (" xxx ")]' non è possibile. – SAL

+0

Anch'io. FINO A quando ho seguito il consiglio di ClearCloud8 (sopra) –

0

Quando i progetti sono condivise tra più soluzioni, il riferimento di librerie scaricati con Nuget devono essere configurati in Csproj manualmente percorso relativo soluzione.

Per esempio, log4net dovrebbe essere configurato come:

<Reference Include="log4net, Version=1.2.15.0, Culture=neutral, PublicKeyToken=669e0ddf0bb1aa2a, processorArchitecture=MSIL"> 
    <HintPath>$(SolutionDir)\packages\log4net.2.0.5\lib\net45-full\log4net.dll</HintPath> 
    <Private>True</Private> 
</Reference> 
Problemi correlati