Il tipo "Expression <>" è definito in un assembly a cui non viene fatto riferimento


86

In ASP.NET MVC 4.5.2 Framework.

dopo aver digitato

@Html.LabelFor()
or 
@Html.EditorFor()

in vista

Ricevo l'errore: il tipo "Expression <>" è definito in un assembly a cui non viene fatto riferimento. È necessario aggiungere un riferimento all'assembly "System.Core, Version = 4.0.0.0, Culture = neutral, PublicKeyToken = b77a5c561934e089".

Ho aggiunto il riferimento all'assembly System.Core.dll, versione 4.0.0.0, versione runtime v4.0.30319. e l'ho fatto anche in web.config


Risposte:


41

Ho affrontato lo stesso numero di te, anche se molto più tardi. Il problema era che non ero in grado di accedere alle viste Razor (.cshtml) poiché ricevevo un errore che indicava che avevo un riferimento all'assembly mancante, vale a dire System.Web.Mvc, anche se era nei riferimenti del progetto. Dopo un'indagine, ho notato che la versione di NuGet installata era la 5.2.3, mentre il progetto richiedeva la 5.2.0. La soluzione è eseguire il downgrade della versione MVC.

  1. Vai a Project-> NuGet Package Manager.
  2. Cerca MVC; sarà il primo risultato.
  3. Il passaggio successivo consiste nel selezionare il downgrade dall'elenco a discesa nei dettagli del pacchetto NuGet e inviarlo.

Conferma tutte le finestre di dialogo e sei pronto per iniziare.


14
Come hai notato che il tuo progetto richiedeva la 5.2.0?
Vanice

3
@ Vanice Penso che dipenda dalla versione .NET Framework: .NET 4.5.2 -> MVC 4.0.0; .NET 4.6.0 -> MVC 5.2.0; .NET 4.6.1 -> MVC 5.2.3. (Non confermato)
JoaoRibeiro

9
Sto usando .net 4.7 e ho ancora questo fastidioso errore
Sven

1
Ho avuto lo stesso problema, risulta che il mio valore di debug in web.config era impostato su false. Impostalo su "True" <compilation debug = "true" targetFramework = "4.5" /> <httpRuntime targetFramework = "4.5" />
mlaribi

Ho provato la soluzione di cui sopra funziona bene. La mia versione della soluzione VS era di 4.6.2 e ho ridotto l'MVC a 5.2.3 da 5.2.4 .Quindi sono venuto a sapere che MVC 5.2.3 è compatibile con .Net 4.6.2
Ibrahim Inam

58

Non sono sicuro che tu stia ancora riscontrando questo problema o meno, ma anch'io stavo avendo lo stesso problema.

Sono stato in grado di trovare le soluzioni qui

/programming/6496223/compilation-error-in-net-4-0-web-config-linq-not-found

<add assembly="System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>

<add assembly="System.Data.DataSetExtensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>

<add assembly="System.Xml.Linq, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>

Spero che possa aiutare..


l'ho già detto .. ho provato questo prima di inviare questa domanda. comunque grazie a entrambi
mansoor

1
bene! Funziona. Nota che dovresti chiudere e riaprire il file cshtml per avere effetto.
Mahdi Ataollahi

Questo ha funzionato per me una volta che ho esaminato tutti i web.configs e mi sono assicurato che le versioni corrispondessero come in stackoverflow.com/a/37381294/8684119
AMG

Funziona, ma ho trovato questa soluzione un po 'sporca. Ad ogni modo, nel mio caso aggiungo solo il riferimento a System.Core
T-moty

45

Questo errore indica che Visual Studio non è in grado di individuare l'assembly System.Web.Mvc per alimentare il suo intellisense per le visualizzazioni Razor. Potrebbe essere necessario uno o entrambi i seguenti per risolverlo.

  1. Assicurati che la versione del framework .NET per la proprietà di compilazione nel web.config principale (quella nella radice del sito web) sia la stessa di quella specificata nelle proprietà del progetto.

[root] /Web.config:

<system.web>
    <compilation targetFramework="4.6" />

Proprietà del progetto:

Proprietà del progetto

  1. Assicurati che la versione dell'assembly MVC specificato nelle viste web.config (quella nella cartella delle visualizzazioni) sia la stessa dell'assembly MVC che stai usando nel tuo progetto.

[cartella visualizzazioni] /web.config:

<system.web.webPages.razor>
    <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />

Proprietà di riferimento dell'assieme MVC:

Versione MVC


3
Questo ha funzionato per me. Grazie molto.
vibs2006

1
Questo ha risolto il problema anche per me, ma non direttamente. Ho dovuto eliminare il file con la versione sbagliata dalla mia cartella bin, aggiornare mvc tramite nuget, quindi ha inserito la versione corretta nella mia cartella bin e ha funzionato. se continui a ricevere la versione sbagliata nella cartella bin dopo l'aggiornamento tramite nuget, elimina quella esistente nella cartella bin
Joshua K,

Grazie. Ho aggiornato Microsoft.AspNet.Mvc tramite NuGet alla v5.2.7 e ho iniziato a vedere questo errore nel file .schtml, mentre l'app funzionava ancora. Si è scoperto che web.config nella cartella Views in <system.web.webPages.razor> era ancora v5.2.3. La modifica alla v5.2.7 ha aiutato.
vkelman

Ha funzionato - grazie! Ricordarmi di controllare le [Views] /web.config è stato fondamentale per me. La versione corrispondeva ovunque ma lì!
Jay Dawkins,

21
  • Chiudi il file cshtml
  • Ricostruisci la soluzione
  • Apri il file cshtml
  • Ancora errori? Riavvia Visual Studio
  • Ancora errori? Usa la risposta di ctm1988

Ho provato tutto ciò che è stato menzionato qui ... ma ancora non funziona .. durante la reinstallazione di Visual Studio funziona perfettamente .. pensavo che la mancanza di dipendenze fosse la ragione ..
mansoor

se hai avuto un progetto che funzionava e andava bene e improvvisamente hai avuto questo problema, questa è probabilmente la soluzione!
Simon_Weaver

16

Ho provato la maggior parte di questi, quello che alla fine ha funzionato per me è stato scaricare il progetto, modificare il file csproj e aggiungere quanto segue:

<Reference Include="System.Core" />

https://stackoverflow.com/a/38371981/2335660


2
Funziona! sembra che lo studio visivo pensi che System.Core sia già stato aggiunto ma in realtà non lo è. Quindi è necessario farlo manualmente
isxaker

10

L'eliminazione del file [projectName] .csproj.user dalla directory del progetto mi ha aiutato.


Ha lavorato per me Vs 2017 Asp MVC5
Speuline

2
Questo ha funzionato, VS 2019 e MVC5. Ho anche ripulito anche le cartelle bin / obj e .vs.
Trattamento favorevole

7

Ho appena avuto lo stesso problema esatto e nessuna delle soluzioni ha risolto il problema. Ho dovuto aggiungere questo al mio web.configinternoSystem.Web

<compilation debug="true" targetFramework="4.5" />
<httpRuntime targetFramework="4.5" />

L'avevo rimosso quando cambiavo alcuni dei configdintorni.


aggiungi tag con qualsiasi tecnologia o altro .. Nessun tag trovato
Vikrant Kashyap

L'aggiunta dell'attributo compilation / targetFramework ha funzionato per me.
Tom Bowers

Avevo accidentalmente aggiunto due diversi valori per il framework di destinazione, questo ha risolto il mio problema.
Geethanga

Questo ha risolto il problema per me, un'app ibrida asp.net/webforms: ho aggiornato il framework di destinazione della mia applicazione a 4.7, non ho notato che queste due impostazioni web.config puntano ancora a 4.5.
Tom Regan

4

Nel mio caso questo messaggio è stato mostrato solo quando Resharper è stato acceso. Ho cancellato la cache Resharper, riavviato VS, spento Resharper e riacceso. Il messaggio è scomparso.


1
Nel mio caso, basta chiudere e riavviare VS. Ho una affilatrice ma non ho dovuto farci nulla.
JayJay

3

Ho avuto lo stesso problema con l'assembly mancante ed è successo che la build di VS2017 non l'ha copiata correttamente nella cartella Bin. Questi passaggi mi hanno aiutato:

  • Vai al nodo Riferimenti del progetto web
  • Trova il riferimento a System.Core
  • Apri la finestra delle proprietà di VS.
  • Nella finestra delle proprietà, modifica Copy Local: False in True

da questo commento: CS0012: il tipo '##### Any type #####' è definito in un assembly a cui non si fa riferimento


Sebbene questo collegamento possa rispondere alla domanda, è meglio includere le parti essenziali della risposta qui e fornire il collegamento come riferimento. Le risposte di solo collegamento possono diventare non valide se la pagina collegata cambia. - Dalla recensione
Steve Gomez

1
@SteveG. Grazie, Steve! L'ho modificato. Non ho commentato molto prima e mi manca un po 'di etichetta così ... :-)
Angel_D

1
Questo ha risolto il mio problema, devo menzionare che era necessario anche un riavvio di Visual Studio, grazie.
Saeed Mousavi

3

In Web.config avevo bisogno di cambiare:

  <system.web>
    <compilation debug="true" targetFramework="4.7">

per

  <system.web>
    <httpRuntime targetFramework="4.7" />
    <compilation debug="true" targetFramework="4.7">

1
Grazie, @juFo! Questo fissa per me in Visual Studio 2019 con il framework di destinazione del progetto MVC 5. Il mio MVC era 4.7.2 mentre il web.config aveva ancora 4.7.1 per il targetFrameworknel <httpRuntime>e <compilation>tag. Il semplice aggiornamento dell'attributo per riflettere correttamente la versione .NET Framework del progetto lo ha risolto per me.
iCode

2

Verificare che il file cshtml Build Action sia impostato su "Content".

Uso ReSharper e ho notato che per qualche motivo il file generato è impostato su "Nessuno" quando si richiama il modello.


2

Aggiungere quanto segue a Web.config (in root). Ho provato assolutamente tutto dei suggerimenti precedenti e niente ha funzionato fino a quando non ho trovato il seguente. Spero che farà risparmiare tempo a qualcun altro.

Io uso targetFramework = "4.6.1", ma lo cambio con la versione che usi, se diversa.

<system.web>
   <compilation debug="true" targetFramework="4.6.1" />
   <httpRuntime targetFramework="4.6.1" />
</system.web>

2

Aggiungere manualmente il file System.Core.dll alla cartella bin. Riavvia VS e compila il progetto . Risolto per me

Aveva errori di progettazione in tutte le viste sugli helper @Html e sulle mie griglie Kendo.

L'aggiunta dell'assembly System.Core in Web.config non ha fatto nulla, né il downgrade della versione MVC. E errore quando si tenta di aggiungere manualmente riferimento a System.Core:

Non è stato possibile aggiungere un riferimento a "System.Core". Questo componente è già automaticamente referenziato dal sistema di compilazione.

Assicurati di controllare che TargetFramework nelle proprietà del progetto corrisponda a quello nel progetto web.config.

Screenshot della cartella bin


1

Per me, c'era un'opzione nel menu del progetto per "Abilita C # 6.0 / VB 14". La selezione di questa opzione ha funzionato. In precedenza ho provato a modificare il web.config, a riavviare Visual Studio, ecc. Come suggerito in questo post.


1

Ho affrontato lo stesso problema. Fondamentalmente il problema sta usando una versione diversa di System.Web.Mvc. Quindi la cosa migliore che dovresti aprire Tools > Nuget Package Manager > Manage Nuget Packages for Solution. Probabilmente puoi vedere System.Web.Mvcnella Cosolidatescheda. Upgrade o downgrade sarebbe l'opzione migliore. Se utilizzi il framework .Net più recente, che è attualmente .Net 4.6.1, dovresti aggiornare tutte le System.Web.Mvcversioni a 5.2.4.0. In bocca al lupo!


Avevo 12 pacchetti che dovevano essere aggiornati e sln funzionava senza problemi una volta aggiornato tutto. Grazie.
Jamie

1

Bene, l'ho risolto correggendo il riferimento all'assembly in /Views/web.config , guarda l'immagine:

inserisci qui la descrizione dell'immagine


1

elimina le directory bin, .vs e obj. dopo aver creato il tuo progetto nello studio visivo.


Passaggio molto da una versione all'altra del mio progetto, alcune che si rivolgono a framework diversi. Questo ha risolto il mio errore di riferimento "System.Core". Grazie per il semplice promemoria che a volte è necessario pulire l'ambiente VS tra i pagamenti.
Suncat2000

1

Ho fatto TUTTO quanto sopra e alla fine ho scoperto che ciò che lo risolve per me (su un sito .net framework 4.7.1 con MVC 5.2.4) è stato aggiungerlo alla radice web.config all'interno <compilation>-

<assemblies>
  <add assembly="System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" />
</assemblies>

0

Questo è successo con una delle mie opinioni: tutte le altre andavano bene. Ho fatto quanto segue:

  • Crea una nuova vista
  • Copia e incolla il contenuto dalla vecchia visualizzazione a quella nuova
  • Eliminato quello vecchio
  • Rinominato il nuovo in quello vecchio

0

Il riavvio di Visual Studio ha funzionato per me.


Questo mi è successo dopo alcuni aggiornamenti NuGet apparentemente innocenti. Erano solo librerie come jQuery e bootstrap. Dopo gli aggiornamenti ho ricevuto questo messaggio di errore e il riavvio di Visual Studio lo ha risolto.
Steve Hiner

0
  • Chiudi il file
  • Pulisci la soluzione
  • Crea la soluzione
  • Riapri il file

0

Prova ad aggiungere

using system.Linq.Expressions;


4
Sebbene questo frammento di codice possa risolvere la domanda, includere una spiegazione aiuta davvero a migliorare la qualità del tuo post. Ricorda che stai rispondendo alla domanda per i lettori in futuro e quelle persone potrebbero non conoscere i motivi del tuo suggerimento sul codice.
Farkie

0

Anch'io ho avuto questo problema. Il passaggio targetFramework="4.5.2"al targetFramwork="4.5" file web.config lo ha risolto.


0

Se lo ottieni solo in uno o due file CSHTML ... è un file danneggiato.

Ho avuto questo problema con un file corrotto che ha alcuni caratteri Unicode nascosti. Prova a copiare tutto il testo del documento in una nuova istanza del blocco note. Cancella il contenuto del file originale e salva ... se la lunghezza del file è> 0, c'è qualcosa che non va.

Elimina il file e salva l'istanza del blocco note sulla vecchia versione. Tutti gli errori sono andati via per me.

Mi è capitato un paio di volte nella mia soluzione. Non sono sicuro di cosa lo stia causando, ma sospetto che sia Resharper stia facendo un quando inizia a inghiottire enormi pezzi di memoria nell'abisso.

Sono l'unico che ha una relazione di amore / odio con Resharper?


0

Ciò può essere causato se nella soluzione sono presenti più progetti che non hanno tutti come destinazione la stessa versione di .NET Framework. Ad esempio, se il progetto dell'app Web è destinato a .NET 4.5 e nella soluzione è presente un riferimento all'assembly a un altro progetto che ha come destinazione .NET 4.5.2. Per risolvere questo problema, è necessario modificare i progetti in modo che tutti abbiano come destinazione la stessa versione di .NET Framework.


0

Se nessuna delle risposte funziona, usa questa. Ho affrontato lo stesso problema! In realtà il file configuration.cs nella cartella migrations era mancante / eliminato. Ho eliminato la cartella delle migrazioni e ho anche eliminato la tabella delle migrazioni dal database. Successivamente nella console di gestione pacchetti (PM) sono stati utilizzati i seguenti comandi:

Enable-Migrations -Force
Add-Migration Initial
update-database

Questo processo ha ricreato il file configuration.cs e tutto ha funzionato perfettamente!


0

Controlla le proprietà del tuo progetto per ottenere il framework Target. Ho risolto questo problema nel mio progetto abbinando il framework di destinazione .NET framework 4.6.1 MVC 5.2.3 era la soluzione apt. Ho ricevuto quella versione MVC da NuGet.


0

Nel mio caso la soluzione era spostare la ConnectionString all'interno del file Web.Config. Questa istruzione dovrebbe essere dopo la sezione AppSettings.

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.