System.web.mvc mancante


89

Abbiamo una vecchia applicazione Web ASP.NET MVC 3, compilata in VS2010, che non riesce a compilarsi, dall'aggiornamento della sicurezza della scorsa settimana.

Il problema è che il riferimento a System.Web.Mvc.dll è interrotto.

Quando apro il file della soluzione sulla nostra macchina di compilazione, dove l'aggiornamento della sicurezza non è stato eseguito, e apro la finestra di dialogo delle proprietà per Riferimenti-> System.Web.MVC, sembra proprio a posto.

Il percorso è C: \ Program Files \ Microsoft ASP.NET \ ASP.NET MVC 3 \ Assemblies \ System.Web.Mvc.dll La versione è 3.0.0.0

Ma quando apro il file della soluzione su una macchina di sviluppo in cui è stato eseguito l'aggiornamento di sicurezza, Riferimenti-> System.Web.MVC viene contrassegnato come mancante. Se lo rimuovo e provo ad aggiungerlo di nuovo utilizzando la finestra di dialogo Aggiungi riferimento di VS2010, non viene visualizzato.

Girovagare per il Web mi ha portato a suggerimenti sull'aggiornamento di MVC tramite NuGet. Non abbiamo usato NuGet, nei nostri progetti VS2010, quindi non sembra del tutto corretto, per questa situazione. Ho provato comunque e ho finito con una mezza dozzina di riferimenti mancanti.

Quando guardo le proprietà di "C: \ Program Files \ Microsoft ASP.NET \ ASP.NET MVC 3 \ Assemblies \ System.Web.Mvc.dll" in Windows Explorer, sulla macchina di compilazione vedo la versione 3.0.0.0.

Quando guardo le proprietà sulla macchina di sviluppo, vedo la versione 3.0.50813.1.

Quello di cui ho bisogno è un modo per cambiare il modo in cui compilo ed eseguo in modo da poter creare ed eseguire indipendentemente da quale di queste due DLL sia installata nel framework .NET 3.0.

Idee?

Quello che ho provato non ha funzionato

Primo tentativo: se l'assieme manca, aggiungilo. Ho cancellato il vecchio riferimento mancante. Quindi ho copiato la DLL dalla cartella "ASP.NET MVC3 \ Assemblies", in una cartella del mio progetto. Impostalo come "Copia sempre" e aggiunto come riferimento.

Con ciò, il progetto sarebbe stato compilato in VS2010, ma quando ho provato a precompilare le pagine con aspnet_compiler, ho ricevuto degli avvisi:

(0): warning CS1702: Assuming assembly reference 'System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' matches 'System.Web.Mvc, Version=3.0.0.1, Culture=neutral, PublicKeyToken=31bf3856ad364e35', you may need to supply runtime policy

Finora sono riuscito a evitare di comprendere le politiche di runtime, ma ho provato ad aggiungere questo, nel web.config:

<runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
        <dependentAssembly>
            <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
            <bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.1" />
        </dependentAssembly>
    </assemblyBinding>
</runtime>

Ho provato di nuovo e ho ricevuto gli stessi avvertimenti.

La mia domanda è: ho ancora un problema? O lo risolverò, nonostante gli avvertimenti?


Hai provato ad aggiornare tutti i pacchetti nuget alla loro ultima versione (dove possibile, ovviamente)?
Silvermind


1
L'app Web non ha pacchetti nuget. E sì, è il bug MS14-059.
Jeff Dege

Sto riscontrando quello che sembra lo stesso problema, anche se sto usando invece il pacchetto nuget e la versione 4. Si compila bene e tutto funziona, ma ci sono questi oltre 20 avvisi di compilazione di cui vorrei sbarazzarmi.
Farinha

Risposte:


141

Ottieni l'ultima versione di MVC3 tramite NuGet. Apri il tuo progetto in Dev Studio. Apri la scheda Console di Gestione pacchetti nella parte inferiore di Dev Studio. Quindi usa questo comando:

PM> Install-Package Microsoft.AspNet.Mvc -Version 3.0.50813.1

Se fai clic sul tasto Tab dopo "-Version" otterrai un elenco di tutte le versioni disponibili.

Se hai una vecchia versione di NuGet, potresti ricevere un errore che indica che devi aggiornarlo. In tal caso, apri Strumenti-> Extension Manager per installare l'ultima versione di NuGet. Nota, dovrai eseguire Dev Studio come amministratore prima di poter installare NuGet.

L'installazione di MVC3 dovrebbe aggiornare Web.config nel progetto.

<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
  <dependentAssembly>
    <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
    <bindingRedirect oldVersion="0.0.0.0-3.0.0.1" newVersion="3.0.0.1" />
  </dependentAssembly>
</assemblyBinding>

1
Badabing !!!! passato ore su questo ... abbastanza semplice da installare la versione in Nuget pm .... grazie mille !!!
Squ1rr3lz

Sì, Nuget funziona con Visual Studio 2010. Devi solo installarlo tramite Extension Manager. Nel menu Strumenti.
spot

2
Il pacchetto di installazione Microsoft.AspNet.Mvc risolverà il problema. Non abbiamo davvero bisogno di menzionare il numero di versione
sujay kodamala

2
@sujaykodamala L'impostazione del numero di versione è importante se si desidera installare l'ultima MVC3 e non MVC5 (ultima versione del pacchetto).
spot

Install-Package Microsoft.AspNet.Mvc -Project ProjectName -Reinstallè più esplicito, installa la versione che hai per quel progetto e gli impedisce di toccare altri progetti (se lo desideri).
Mike E

30

MVC 5

C: \ Programmi (x86) \ Microsoft ASP.NET \ ASP.NET Web Stack 5 \ Packages \ Microsoft.AspNet.Mvc.5.0.0 \ lib \ net45 \ System.Web.Mvc.dll

MVC 4

C: \ Programmi (x86) \ Microsoft ASP.NET \ ASP.NET MVC 4 \ Assemblies \ System.Web.Mvc.dll

MVC 3

C: \ Programmi (x86) \ Microsoft ASP.NET \ ASP.NET MVC 3 \ Assemblies \ System.Web.Mvc.dll

MVC 2

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

Dove posso trovare System.Web.MVC dll in un sistema in cui è installato MVC 3?


Grazie, questo mi ha aiutato ad aprire il progetto mirato per VS2010 nell'anno 2018 :)
Aamol

23

Il modo più semplice per risolvere questo problema è installare ASP.NET MVC 3 dal programma di installazione delle piattaforme Web.

inserisci qui la descrizione dell'immagine

http://www.microsoft.com/web/downloads/

O usando il comando Nuget

Install-Package Microsoft.AspNet.Mvc -Version 3.0.50813.1

1
Questo ha risolto il mio problema che si presentava dopo che sono passato a un nuovo PC e avevo un progetto con riferimenti alle DLL ASP.NET MVC 4 che non avevo ancora installato sulla nuova macchina.
clovola

3

in VS 2017 ho pulito la soluzione e l'ho ricostruita e questo l'ha risolta


2

Ho la stessa situazione: Visual Studio 2010, nessun NuGet installato e un'applicazione ASP.NET che utilizza System.Web.Mvc versione 3.

Quello che ha funzionato per me, è stato impostare ogni progetto C # che utilizza System.Web.Mvc, per andare a Riferimenti in Esplora soluzioni e impostare le proprietà su System.Web.Mvc, con Copia locale su true e Versione specifica su false - l'ultimo ha fatto sì che il campo Versione mostrasse la versione corrente su quella macchina.


1

Avevo questo problema in vs2017, avevo già MVC tramite nuget ma System.Web.Mvc non appariva nell'elenco "Assiemi" sotto "Aggiungi riferimento".

La soluzione era selezionare "Estensioni" in "Assiemi" nella finestra di dialogo "Aggiungi riferimento".


0

Nel mio caso avevo tutti i riferimenti appropriati nel mio progetto. Ho scoperto che costruendo la soluzione i pacchetti nuget venivano ripristinati automaticamente.


0

L'esempio mvcmusicstore.codeplex.com aperto nel vs2015 mancava di alcuni riferimenti, uno dei quali System.web.mvc.

La soluzione per questo era rimuoverlo dai riferimenti e aggiungere un riferimento: scegli Estensioni in Assiemi, lì puoi trovare e aggiungere System.Web.Mvc.

(Gli altri assembly che ho aggiunto con i pacchetti nuget.)


0

Nel caso in cui qualcuno sia in una posizione in cui ottiene lo stesso errore. Nel mio caso, il downgrade di Microsoft.AspNet.Mvc e l'aggiornamento di nuovo hanno aiutato. Ho avuto questo problema dopo aver installato Glimpse e averlo rimosso. System.Web.Mvc aveva riferimenti errati in qualche modo, pulire la soluzione o ricostruirla non ha funzionato nel mio caso. Provalo se nessuna delle risposte precedenti funziona per te.


0

Aggiungi di nuovo il riferimento da ./packages/Microsoft.AspNet.Mvc.[version”/lib/net45/System.Web.Mvc.dll

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.