Nel mio caso ho riscontrato questo problema solo sul mio PC per un solo progetto. Il mio progetto ha funzionato bene in VS2012 ma quando è stato aperto in VS2017 presentava questo problema.
Il problema principale per me qui era la cache. Il mio progetto puntava alle versioni precedenti memorizzate nella cache di dll per Razor e MVC e non trovava funzionalità aggiunte nelle versioni più recenti, come ViewBag. ViewBag è stato aggiunto in Razor versione 3, ma poiché avevo Razor versione 2 memorizzata nella cache non è stato possibile trovare ViewBag (ma potrebbe trovare altre cose che erano presenti nella versione 2). Tuttavia, semplicemente svuotare la cache come nella risposta accettata non ha risolto il mio problema. Abbiamo dovuto modificare i file di configurazione in modo che dicessero "usa la versione 3 invece di 2" per Razor e "usa la versione 5 invece di 4" per MVC, quindi chiudendo VS, rimuovendo la cache, aprendo il progetto e ricostruendo. Poi le cose si sono aggiustate. Di seguito sono riportate istruzioni più dettagliate.
Ecco la sequenza di modifiche che mi hanno aiutato a risolvere il mio problema:
- Nella cartella "Visualizzazioni" Web.config cambia tutte le posizioni in cui
- La versione MVC è impostata da 4.0.0.0 a 5.0.0.0
- La versione Razor è impostata da 2.0.0.0 a 3.0.0.0
Ecco quelle righe nel mio caso:
<sectionGroup name="system.web.webPages.razor" type="... Version=3.0.0.0 ...">
<section name="host" type="... Version=3.0.0.0 ..." .../>
<section name="pages" type="... Version=3.0.0.0 ..." .../>
</sectionGroup>
...
<host factoryType="... System.Web.Mvc, Version=5.0.0.0 ..." />
...
<pages
...
pageParserFilterType="... Version=5.0.0.0 ..."
pageBaseType="... Version=5.0.0.0 ..."
userControlBaseType="... Version=5.0.0.0 ...">
<controls>
<add assembly="... Version=5.0.0.0 ..." ... />
</controls>
</pages>
(note: 1) le tue versioni potrebbero essere diverse, sto solo dicendo cosa era necessario fare nel mio caso 2) Ho omesso alcune cose con "..." per brevità 3) anche se hai una versione MVC qualcosa come 5.3.2.0 dovresti comunque inserire 5.0.0.0, lo stesso con la versione di Razor - inserisci tutti zeri in 3.0.0.0)
Nel file di configurazione principale (quello al livello superiore) cambia webPages:version
da 2.0.0.0 a 3.0.0.0.
Questa modifica probabilmente non ha influito sulla soluzione, ma ne parlerò comunque. Assicurati che la <namespaces>
sezione della cartella "Visualizzazioni" abbia esattamente gli stessi contenuti del file .conifg principale alla radice del progetto, qualcosa come:
<namespaces>
<add namespace="System.Web.Helpers" />
<add namespace="System.Web.Mvc" />
<add namespace="System.Web.Mvc.Ajax" />
<add namespace="System.Web.Mvc.Html" />
<add namespace="System.Web.Optimization" />
<add namespace="System.Web.Routing" />
<add namespace="System.Web.WebPages" />
</namespaces>
- Infine, chiudi VS. Elimina tutti i file della cache in
%LOCALAPPDATA%\Microsoft\VisualStudio\14.0\ComponentModelCache
(o qualunque sia il tuo percorso corretto) proprio come suggerito nella risposta (attualmente) accettata da Fenton. Elimina anche il .scan
file, anche se non è menzionato in quella risposta. Una volta terminato, apri VS, pulisci il tuo progetto e ricostruiscilo. Le cose dovrebbero funzionare adesso. Ha funzionato per me.