Perché System.Web.Mvc non è elencato in Aggiungi riferimenti?


132

Utilizzando C #, Visual Studio 2010.

C'è uno spazio dei nomi chiamato System.Web.Mvc documentato su MSDN. La documentazione per tutti i tipi in quello spazio dei nomi dice che sono presenti System.Web.Mvc.dll.

Tuttavia, quando vado ad aggiungere riferimento, scheda ".NET", questo assembly non è presente nell'elenco. Perché?


1
Puoi chiarire: il tuo progetto FUNZIONA senza quel riferimento? È nel tuo web.config (vedi la mia risposta)?
Base

4
Non sto lavorando a nessun progetto. Volevo solo aiutare qualcuno qui su StackOverflow. Di solito aggiungo un riferimento per guardare IntelliSense e / o F12 per qualsiasi tipo. In questo caso l'assembly desiderato mancava dall'elenco, quindi ho chiesto il perché.
Timwi,

1
NOTA per i lettori di questa pagina - ad oggi (2015-02-09) il metodo per risolverlo è cambiato nel tempo - leggi tutte le risposte - varie versioni di VS.NET e .NET framework spostano il codice di riferimento per MVC in in luoghi diversi.
qxotk,

Risposte:


106

In VS Express 2012 non sono riuscito a trovare System.Web.Mvc nella scheda "Assiemi", ma dopo un po 'di ricerca ho scoperto che ho bisogno di cercare nella scheda " Assiemi \ estensioni " piuttosto che nella predefinita "Assiemi \ framework "tab.


1
+1 per te perché hai trovato la causa principale del problema che ho avuto. Ho scelto di utilizzare il metodo di installazione NuGet di seguito indicato e commenterò qui ciò che ho fatto.
qxotk,

Ho provato questo metodo in Visual Studio Community 2015 ma ho riscontrato un errore di runtime relativo all'incompatibilità della versione ( Could not load file or assembly...The located assembly's manifest definition does not match the assembly reference). Ho un altro progetto nella mia soluzione che fa riferimento a una versione diversa e questo metodo mi ha permesso solo di aggiungere un riferimento a System.Web.Mvc, Versione = 4.0.0.0. Il metodo di installazione NuGet ha aggiunto la versione corretta
NJS

101

Il modo migliore è utilizzare il gestore di pacchetti NuGet.

Basta aggiornare il seguente pacchetto MVC e dovrebbe funzionare.

inserisci qui la descrizione dell'immagine


4
Devo ammettere che questo è il modo giusto per aggiungere riferimenti a MVC nella maggior parte dei casi (dovrebbe risparmiare i problemi con l'esecuzione dell'app al di fuori di Visual Studio che potrebbero causare riferimenti errati). Tuttavia, nelle grandi soluzioni che contengono già alcuni progetti MVC, è ancora meglio utilizzare "Gestisci pacchetti NuGet per soluzione" per installare la stessa versione della libreria. Il motivo è che se li installi dal gestore dei pacchetti NuGet, potresti ritrovarti con l'incompatibilità della versione (il gestore di solito ti offre la versione più recente).
jahu,

2
Ho usato quella soluzione per un progetto usando MVC 4 che non poteva essere compilato con Visual Studio 2015. Inoltre, assicura che le librerie del progetto siano uniformi per tutti gli sviluppatori.
ceetheman,

1
Ho avuto questo problema con una scatola che conteneva solo VS2015, mentre gli altri membri del team avevano VS2013 - che potrebbe averli riferiti alla vecchia posizione (nessun errore di compilazione) mentre non avevo il codice e errori di compilazione. Da notare, ad oggi, non sono riuscito a trovare Microsoft.Web.Mvc - che erano i riferimenti che hanno causato il problema. Nella risposta di @forderah si fa luce sul fatto che il nome è diverso in NuGet. Microsoft.Web.Mvc è ora Microsoft.AspNet.Mvc, che estrae anche le dipendenze elencate nella sua risposta.
qxotk,

1
Ho anche avuto questo problema in VS2017 e questo ha risolto il problema. Non sono sicuro del motivo per cui VS2017 mi ha detto che pensa che l'assembly che deve essere referenziato sia System.Web.Mvc mentre in realtà sta cercando Microsoft.AspNet.Mvc
Michael Davidson

60

Ho avuto lo stesso problema e non sono riuscito a individuare l'assembly di riferimento System.Web.MVC.

Finalmente scoperto e si trovava all'interno della seguente posizione.

Nota se il tuo VS è stato installato in C: (A volte MVC.dll non si trova nella posizione predefinita di cui tutti parlano, intendo la cartella " Riferimenti di assemblaggio " che si trova nell'unità C:).

se non è lì, dovrebbe essere sicuramente qui:

\ Programmi (x86) \ Microsoft ASP.NET \ ASP.NET MVC 2 \ Assemblies \ System.Web.Mvc.dll

Quindi aggiungi la dll tramite la navigazione o la scheda Sfoglia nel menu Aggiungi riferimento.


1
Questo mi fornisce il riferimento, anche se sono sicuro di aver precedentemente aggiunto questo riferimento attraverso l'elenco Assemblee Framework.
Zarepheth,

9
Non è davvero un'ottima soluzione se lavori in team con VCS. I percorsi assoluti sono malvagi in questo caso.
Denis The Menace,

Sicuramente d'accordo sul fatto che questa è una cattiva soluzione in qualsiasi tipo di ambiente di sviluppo del team a causa della dipendenza del percorso assoluto codificata.
Craig,

Il modo per aggirare il problema è assicurarsi che tutti stiano utilizzando lo stesso percorso per la DLL. Non dovrebbe essere un problema se tutti i membri del team hanno gli assembly installati in quella posizione, come dovrebbero. In alternativa, la DLL può essere copiata da quel percorso e posizionata direttamente nel progetto, quindi ha un percorso relativo. Ma in entrambi i casi, avere solo la posizione di quella DLL, è un buon punto di partenza.
vapcguy,

Questo ha davvero aiutato; ma Microsoft avrebbe dovuto
renderlo

28

Puoi anche aggiungere questo dalla console Nuget Package Manager, qualcosa del tipo:

Install-Package Microsoft.AspNet.Mvc -Version 4.0.20710.0 -ProjectName XXXXX

Microsoft.AspNet.Mvc ha dipendenze da:

  • "Microsoft.AspNet.WebPages (≥ 2.0.20710.0 && <2.1)"
  • "Microsoft.Web.Infrastructure (≥ 1.0.0.0)"
  • "Microsoft.AspNet.Razor (≥ 2.0.20710.0 && <2.1)"

... che non mi sembra un grosso problema. Nel nostro caso, questa è una libreria di classi che esiste esclusivamente per fornire supporto per le nostre app Mvc. Quindi, riteniamo che nel peggiore dei casi sia una dipendenza benigna.

Preferisco decisamente questo a indicare un assembly sul file system o nel GAC, poiché l'aggiornamento del pacchetto in futuro sarà probabilmente molto meno doloroso delle esperienze che ho avuto con il GAC e i riferimenti di assembly del file system in passato.


1
Ho usato questo metodo e sono d'accordo con non usare percorsi assoluti locali nei riferimenti. Ho usato il gestore pacchetti NuGet, aggiungendo il pacchetto e le dipendenze risolto il problema sulla mia casella solo VS2015.
qxotk,

11

Ho avuto lo stesso problema ed ecco il motivo divertente: la mia ipotesi è che ti aspetti System.Web.Mvcdi trovarti sottoSystem.Web nella lista. Ma l'elenco non è alfabetico.

Prima ordina l'elenco e poi guarda vicino a System.Web.


1
Assicurati anche di ottenere la versione corretta. Nel mio caso System.Web.Mvc v2 e v4 ci sono, e anche loro non sono uno accanto all'altro.
TTT

Ha avuto lo stesso problema nel trovare System.Web.Mvc per gli stessi motivi. Sono andato invece con Microsoft.AspNet.Mvc, assicurandomi di vedere cosa stavano usando gli altri progetti nella mia soluzione in relazione al numero di versione.
qxotk,

5

"OK, l'aggiunta di XML a Web.config funziona, ma non risponde alla domanda"

Dovrebbe essere lì. Per impostazione predefinita, l'elenco di riferimenti aggiunti sembra essere ordinato, ma non è il caso. Premi l'intestazione del nome e guarda di nuovo.


Non dico spesso "questo assemblaggio manca dalla lista" a meno che non ne sia sicuro.
Timwi,

@Timwi ho pensato, ma data l'altra risposta, che ci sono v. Poche possibilità che non ci sia con vs 2010 installato e che nel mio caso ho sempre trovato ciò di cui avevo bisogno nell'elenco dei riferimenti senza mai colpire l'intestazione del nome che avevo di dirlo ... in realtà, io ora so perché non ho mai avuto a prima e in vS 2010 io - vedo il primo commento: weblogs.asp.net/scottgu/archive/2009/10/29/...
eglasius

Quindi stai dicendo che facendo clic sull'intestazione Nome si ordinano le cose per te? Non fa nulla qui sulla mia macchina ...
Roman Starkov

1
@romkyns funziona solo dopo aver caricato tutti gli assembly nell'elenco.
Eglasio,

5

Controlla questi passaggi:

  1. Verificare che MVC sia installato correttamente.
  2. Controllare la proprietà del progetto e vedere qual è il Target Framework del progetto. Se il framework di destinazione non è impostato su .Net Framework 4, impostarlo.

Nota : se il framework di destinazione è impostato su Profilo client .Net Framework 4, non elencherà il riferimento MVC nell'elenco dei riferimenti. Si possono trovare diverse tra .Net Framework 4 e .Net Framework 4 Client Profile qui .

Il profilo client .NET Framework 4 è un sottoinsieme di .NET Framework 4 ottimizzato per le applicazioni client. Fornisce funzionalità per la maggior parte delle applicazioni client, tra cui Windows Presentation Foundation (WPF), Windows Form, Windows Communication Foundation (WCF) e ClickOnce. Ciò consente una distribuzione più rapida e un pacchetto di installazione più piccolo per le applicazioni destinate al profilo client .NET Framework 4.


Questo è stato un buon consiglio. Quando sono andato alle proprietà del mio progetto, ho elencato solo .NET Core 1 e 2. Nessun .NET Framework 4.x. Mi mancavano le assemblee nella mia lista. Si è scoperto come ho costruito il mio progetto - ho scelto l'opzione sbagliata - per utilizzare .NET Core anziché .NET Framework. Ora conosco la differenza. :)
vapcguy,

4

Ho risolto questo problema cercando "mvc". System.Web.Mvc è apparso nei risultati di ricerca, nonostante non sia contenuto nell'elenco.


3

L'assembly desiderato è apparso nell'elenco.

Posso solo speculare su ciò che ha causato la sua comparsa, ma sospetto sia il fatto che sono passato a FileNuovoProgettoApplicazione Web ASP.NET , cosa che non avevo mai fatto prima. È possibile che ciò abbia causato una sorta di inizializzazione tardiva e che l'elenco fosse popolato con assiemi aggiuntivi per lo sviluppo Web.


è sempre stato sicuramente sempre lì, è ok: P ... vedi il commento che ho aggiunto alla mia risposta, nel link dice: "Il problema con la scheda .net, è mentre sta succedendo l'asincrono e il suo aggiornamento, il suo non in ordine alfabetico ... "... che è un nuovo comportamento rispetto al 2010, non mi ero mai reso conto che fino a quando non ho visto la tua domanda.
Eglasio,

@egl Ho appena testato sulla mia macchina qui (VS2010) e non è per niente nell'elenco. Ricevo diversi insiemi di assiemi a seconda del Target Framework, ma questo non è mai lì.
Roman Starkov,

@romkyns prova a scegliere come target .net 4 e a fare ciò che ho menzionato nella mia risposta. Assicurati inoltre di concedergli abbastanza tempo per il caricamento, poiché esegue un caricamento asincrono.
Eglasio,

2

Questo è cambiato per Visual Studio 2012 (so che la domanda originale dice VS2010, ma il titolo continuerà a colpire nelle ricerche).

Quando si crea un progetto MVC VS2012, system.web.mvc viene inserito nella cartella dei pacchetti che è peer alla soluzione. Questo sarà referenziato nel progetto web per impostazione predefinita e qui puoi trovare il percorso esatto).

Se vuoi fare riferimento a questo in un progetto secondario (ad esempio un dll di supporto con filtri o altri attributi), puoi fare riferimento da lì.


2

Non ho ricevuto System.Web.Mvc in VS 2012 ma l'ho ottenuto in VS 2013. Usando la finestra di dialogo AddReference, inserisci qui la descrizione dell'immagine

Oppure, puoi trovarlo nel percorso del tuo progetto,

YourProjectName \ pacchetti \ Microsoft.AspNet.Mvc.5.0.0 \ lib \ net45 \ System.Web.Mvc.dll


Ottimo consiglio che mostra dove trovare nel percorso del progetto esistente. Grazie!
Alan,

0

Credo che troverai l'assembly MVC a cui si fa riferimento nel file web.config, non nel progetto stesso.

Qualcosa come questo:

<compilation debug="true" targetFramework="4.0">
  <assemblies>
    <add assembly="System.Web.Abstractions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
    <add assembly="System.Web.Routing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
    <add assembly="System.Web.Mvc, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
  </assemblies>
</compilation>

Per rispondere al tuo commento;

La migliore risposta che posso dare è da qui :

L'elemento add aggiunge un riferimento di assembly da utilizzare durante la compilazione di una risorsa dinamica. ASP.NET collega automaticamente questo assembly alla risorsa durante la compilazione di ciascun modulo di codice.


OK, l'aggiunta di XML a Web.config funziona, ma non risponde alla domanda.
Timwi,

"funziona" come in esso fornisce l'intellisense? Ho modificato la mia risposta
Basic

0

può essere installato separatamente, e non è incluso in framwork, scegli l'elenco di schede "estensioni" ed esiste che ci sono e molte altre librerie, tutto ok non è necessario per usare vecchie librerie ecc., esiste 20 20 e 4001 precedenti


0

Se hai riscontrato questo problema in Visual Studio 2017, è probabile che tu stia lavorando con un progetto MVC 4 creato in una versione precedente di VS con un percorso di suggerimento di riferimento che punta a C:\Program Files (x86)\Microsoft ASP.NET. Visual Studio 2017 non installa più questa directory.

Generalmente risolviamo questo problema installando una copia di Visual Studio 2015 insieme alla nostra istanza 2017 e installando le librerie necessarie nel percorso precedente. Quindi aggiorniamo tutti i riferimenti nei progetti interessati e siamo pronti per partire.

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.