Der Typ 'Ausdruck <>' wird in einer Assembly definiert, auf die nicht verwiesen wird

82

In ASP.NET MVC 4.5.2 Framework.

nach dem Tippen

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

im Hinblick auf

Ich erhalte die Fehlermeldung: Der Typ 'Ausdruck <>' ist in einer Assembly definiert, auf die nicht verwiesen wird. Sie müssen einen Verweis auf die Assembly 'System.Core, Version = 4.0.0.0, Culture = neutral, PublicKeyToken = b77a5c561934e089' hinzufügen.

Ich habe die Assemblyreferenz System.Core.dll, Version 4.0.0.0, Runtime Version v4.0.30319 hinzugefügt. und auch ich habe in web.config

Mansoor
quelle

Antworten:

41

Ich bin in der gleichen Ausgabe wie Sie gelaufen, wenn auch viel später. Das Problem war, dass ich nicht auf Razor-Ansichten (.cshtml) zugreifen konnte, da eine Fehlermeldung angezeigt wurde, dass eine Assembly-Referenz fehlte System.Web.Mvc, obwohl diese in den Projektreferenzen enthalten war. Nach der Untersuchung habe ich festgestellt, dass die installierte NuGet-Version 5.2.3 war, während für das Projekt 5.2.0 erforderlich war. Die Lösung besteht darin, die MVC-Version herunterzustufen.

  1. Gehen Sie zu Projekt-> NuGet Package Manager.
  2. Suche nach MVC; Es wird das erste Ergebnis sein.
  3. Als Nächstes wählen Sie Downgrade aus der Dropdown-Liste in den Details des NuGet-Pakets aus und senden es ab.

Bestätigen Sie alle Dialoge und Sie können loslegen.

Prashant2008
quelle
13
Wie haben Sie festgestellt, dass Ihr Projekt 5.2.0 benötigt?
Vanice
2
@ Vanice Ich denke, es hängt von der .NET Framework-Version ab: .NET 4.5.2 -> MVC 4.0.0; .NET 4.6.0 -> MVC 5.2.0; .NET 4.6.1 -> MVC 5.2.3. (Nicht bestätigt)
JoaoRibeiro
9
Ich benutze .net 4.7 und habe immer noch diesen nervigen Fehler
Sven
1
Ich hatte das gleiche Problem, es stellte sich heraus, dass mein Debug-Wert in der web.config auf false gesetzt war. Setzen Sie es auf "True" <compilation debug = "true" targetFramework = "4.5" /> <httpRuntime targetFramework = "4.5" />
Mehdi Laribi
Ich habe versucht, die obige Lösung funktioniert gut. Meine VS Solution Version war 4.6.2 und ich habe die MVC von 5.2.4 auf 5.2.3 heruntergestuft. So erfuhr ich, dass MVC 5.2.3 mit .Net 4.6.2 kompatibel ist
Ibrahim Inam
57

Ich bin nicht sicher, ob Sie dieses Problem noch haben oder nicht, aber ich hatte das gleiche Problem auch.

Hier konnte ich die Lösungen finden

/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"/>

Ich hoffe das hilft..

ctm1988
quelle
Ich habe das schon gesagt. Ich habe es versucht, bevor ich diese Frage poste. Auf jeden Fall danke euch beiden
Mansoor
1
fein! Es klappt. Beachten Sie, dass Sie die cshtml-Datei schließen und erneut öffnen sollten, damit sie wirksam wird.
Mahdi Ataollahi
Dies funktionierte für mich, nachdem ich alle web.configs durchgesehen und sichergestellt hatte, dass die Versionen wie in stackoverflow.com/a/37381294/8684119
AMG
Es funktioniert, aber ich fand diese Lösung ein bisschen schmutzig. Wie auch immer, in meinem Fall füge ich nur den Verweis auf System.Core
T-moty
42

Dieser Fehler bedeutet, dass Visual Studio die System.Web.Mvc-Assembly nicht finden kann, um ihre Intellisense für Razor-Ansichten zu aktivieren. Möglicherweise ist eine oder beide der folgenden Maßnahmen erforderlich, um das Problem zu beheben.

  1. Stellen Sie sicher, dass die Version des .NET Frameworks für die Kompilierungseigenschaft in der Haupt-web.config (die im Website-Stammverzeichnis) mit der in den Projekteigenschaften angegebenen übereinstimmt.

[root] /Web.config:

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

Projekteigenschaften:

Projekteigenschaften

  1. Stellen Sie sicher, dass die in der Ansicht web.config angegebene Version der MVC-Assembly (die im Ordner views) mit der MVC-Assembly übereinstimmt, die Sie in Ihrem Projekt verwenden.

[Ordner anzeigen] /web.config:

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

Eigenschaften der MVC-Baugruppenreferenz:

MVC-Version

Tom Bowers
quelle
3
Das hat bei mir funktioniert. Danke vielmals.
Vibs2006
1
Dies löste es auch für mich, aber nicht direkt. Ich musste die Datei mit der falschen Version aus meinem bin-Ordner löschen, mvc über nuget aktualisieren und dann die richtige Version in meinem bin-Ordner ablegen und es funktionierte. Wenn Sie nach dem Update über Nuget immer noch die falsche Version im Ordner bin haben, löschen Sie die vorhandene Version im Ordner bin
Joshua K
Danke dir. Ich habe Microsoft.AspNet.Mvc über NuGet auf Version 5.2.7 aktualisiert und diesen Fehler in der .schtml-Datei angezeigt, während die App noch funktionierte. Es stellte sich heraus, dass web.config im Ordner Ansichten unter <system.web.webPages.razor> noch Version 5.2.3 war. Das Ändern auf v5.2.7 hat geholfen.
Vkelman
Das hat funktioniert - danke! Für mich war es wichtig, die [Ansichten] /web.config zu überprüfen. Version überall anders als dort!
Jay Dawkins
20
  • Schließen Sie die cshtml-Datei
  • Lösung neu erstellen
  • Öffnen Sie die cshtml-Datei
  • Immer noch Fehler? Starten Sie Visual Studio neu
  • Immer noch Fehler? Verwenden Sie die Antwort von ctm1988
CularBytes
quelle
Ich habe versucht, alles wurde hier erwähnt ... aber es funktioniert immer noch nicht. Während der Neuinstallation von Visual Studio funktioniert es perfekt. Ich dachte, fehlende Abhängigkeiten sind der Grund.
Mansoor
Wenn Sie ein Projekt hatten, das funktionierte und in Ordnung war und plötzlich dieses Problem auftrat, ist dies wahrscheinlich die Lösung!
Simon_Weaver
16

Ich habe die meisten davon ausprobiert. Schließlich hat es für mich funktioniert, das Projekt zu entladen, die csproj-Datei zu bearbeiten und Folgendes hinzuzufügen:

<Reference Include="System.Core" />

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

Leyla Azari
quelle
2
Es klappt! Es sieht so aus, als ob das visuelle Studium denkt, dass System.Core bereits hinzugefügt wurde, aber es gibt es wirklich nicht. Sie müssen dies also manuell tun
isxaker
9

Das Löschen der Datei [projectName] .csproj.user aus dem Projektverzeichnis hat mir geholfen.

Robo verbrannt
quelle
Arbeitete für mich gegen 2017 Asp MVC5
Speuline
2
Dieser funktionierte, VS 2019 & MVC5. Ich habe auch die Ordner bin / obj und .vs bereinigt.
Kronzeugenregelung
6

Ich hatte genau das gleiche Problem und keine der Lösungen hat das Problem behoben. Ich musste dies in mein Inneres web.configeinfügenSystem.Web

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

Ich hatte es entfernt, als ich etwas von der configUmgebung gewechselt hatte .

jsanman
quelle
Bitte fügen Sie ein Tag mit einer Technologie oder mehr hinzu. Keine Tags gefunden
Vikrant Kashyap
Das Hinzufügen des Attributs compilation / targetFramework hat bei mir funktioniert.
Tom Bowers
Ich hatte versehentlich zwei verschiedene Werte für das Ziel-Framework hinzugefügt, dies löste mein Problem.
Geethanga
Dies behebt das Problem für mich, eine hybride asp.net/webforms-App: Ich habe das Zielframework meiner Anwendung auf 4.7 aktualisiert und festgestellt, dass diese beiden Einstellungen für web.config immer noch auf 4.5 verweisen.
Tom Regan
4

In meinem Fall wurde diese Meldung nur angezeigt, wenn Resharper aktiviert war. Ich habe den Resharper-Cache geleert, VS neu gestartet, Resharper ausgeschaltet und wieder eingeschaltet. Die Nachricht ist verschwunden.

Neshta
quelle
1
In meinem Fall schließen Sie einfach VS und starten Sie es neu. Ich habe Resharper, musste aber nichts damit anfangen.
JayJay
3

In Web.config musste ich Folgendes ändern:

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

zu

  <system.web>
    <httpRuntime targetFramework="4.7" />
    <compilation debug="true" targetFramework="4.7">
juFo
quelle
1
Vielen Dank, @juFo! Dies wurde für mich in Visual Studio 2019 mit MVC 5 behoben. Das Zielframework meines MVC-Projekts war 4.7.2, während die web.config noch 4.7.1 für die Tags targetFrameworkin the <httpRuntime>und hatte <compilation>. Durch einfaches Aktualisieren des Attributs, um die .NET Framework-Version des Projekts korrekt wiederzugeben, wurde es für mich behoben.
iCode
2

Überprüfen Sie, ob die Build-Aktion für die cshtml-Datei auf "Inhalt" eingestellt ist.

Ich verwende ReSharper und habe festgestellt, dass die generierte Datei beim Aufrufen der Vorlage aus irgendeinem Grund standardmäßig "Keine" ist.

Kevin R.
quelle
2

Ich hatte das gleiche Problem mit der fehlenden Assembly und es kam vor, dass der VS2017-Build diese nicht ordnungsgemäß in den Bin-Ordner kopiert hat. Diese Schritte haben mir geholfen:

  • Navigieren Sie zum Knoten Referenzen des Webprojekts
  • Suchen Sie den Verweis auf System.Core
  • Öffnen Sie das VS-Eigenschaftenfenster
  • Ändern Sie im Eigenschaftenfenster Copy Local: False in True

aus diesem Kommentar: CS0012: Der Typ '##### Jeder Typ #####' wird in einer Assembly definiert, auf die nicht verwiesen wird

Angel_D
quelle
Während dieser Link die Frage beantworten kann, ist es besser, die wesentlichen Teile der Antwort hier aufzunehmen und den Link als Referenz bereitzustellen. Nur-Link-Antworten können ungültig werden, wenn sich die verknüpfte Seite ändert. - Aus der Rezension
Steve Gomez
1
@SteveG. Danke, Steve! Ich habe es bearbeitet. Ich habe noch nicht viel kommentiert und es fehlt
mir
2

Fügen Sie Web.config (im Stammverzeichnis) Folgendes hinzu. Ich habe absolut alles von früheren Vorschlägen ausprobiert und nichts hat funktioniert, bis ich das Folgende gefunden habe. Hoffe, es wird Zeit für jemand anderen sparen.

Ich verwende targetFramework = "4.6.1", ändere es jedoch auf die Version, die Sie verwenden, wenn es anders ist.

<system.web>
   <compilation debug="true" targetFramework="4.6.1" />
   <httpRuntime targetFramework="4.6.1" />
</system.web>
Njål Eide
quelle
2

Fügen Sie die Datei System.Core.dll manuell zum Ordner bin hinzu. Starten Sie VS neu und erstellen Sie das Projekt . Für mich gelöst

Hatte Designfehler in allen Ansichten auf @ HTML-Helfern und auf meinen Kendo-Gittern.

Das Hinzufügen der System.Core-Assembly in Web.config hat weder zu einem Downgrade der MVC-Version geführt. Und Fehler beim Versuch, manuell einen Verweis auf System.Core hinzuzufügen:

Ein Verweis auf 'System.Core' konnte nicht hinzugefügt werden. Diese Komponente wird vom Build-System bereits automatisch referenziert.

Stellen Sie sicher, dass TargetFramework in den Projekteigenschaften mit dem in project web.config übereinstimmt.

Screenshot des Bin-Ordners

pkucas
quelle
1

Für mich gab es im Projektmenü die Option "C # 6.0 / VB 14 aktivieren". Die Auswahl dieser Option hat den Trick getan. Zuvor habe ich versucht, die Datei web.config zu ändern, Visual Studio neu zu starten usw., wie in diesem Beitrag vorgeschlagen.

Aggromonster
quelle
1

Ich hatte das gleiche Problem. Grundsätzlich besteht das Problem darin, eine andere Version von zu verwenden System.Web.Mvc. Also das Beste, was Sie öffnen sollten Tools > Nuget Package Manager > Manage Nuget Packages for Solution. Sie können wahrscheinlich System.Web.Mvcauf der CosolidateRegisterkarte sehen. Ein Upgrade oder Downgrade wäre die beste Option. Wenn Sie das neueste .NET-Framework verwenden, das derzeit verfügbar ist .Net 4.6.1, sollten Sie alle System.Web.MvcVersionen auf aktualisieren 5.2.4.0. Viel Glück!

Mehmet Taha Meral
quelle
Ich hatte 12 Pakete, die aktualisiert werden mussten, und der SLN lief ohne Probleme, sobald ich alles aktualisiert hatte. Danke dir.
Jamie
1

Nun, ich habe es behoben, indem ich die Assembly-Referenz in /Views/web.config korrigiert habe . Siehe Abbildung:

Geben Sie hier die Bildbeschreibung ein

Altaf
quelle
1

Löschen Sie das Verzeichnis bin, .vs und obj. Nachdem Sie Ihr Projekt im Visual Studio erstellt haben.

Nisanur
quelle
Ich wechsle viel zwischen Versionen meines Projekts, einige, die auf verschiedene Frameworks abzielen. Dies hat meinen Referenzfehler "System.Core" behoben. Vielen Dank für die einfache Erinnerung, dass es manchmal notwendig ist, die VS-Umgebung zwischen den Kassen zu bereinigen.
Suncat2000
0

Dies geschah mit einer meiner Ansichten - allen anderen ging es gut. Ich habe folgendes gemacht:

  • Erstellen Sie eine neue Ansicht
  • Kopieren Sie den Inhalt und fügen Sie ihn aus der alten in die neue Ansicht ein
  • Löschte den alten
  • Der neue wurde in den alten umbenannt
Liam
quelle
0

Das Neustarten von Visual Studio hat bei mir funktioniert.

Mangesh Kadam
quelle
Dies geschah mir nach einigen scheinbar unschuldigen NuGet-Updates. Es waren nur Bibliotheken wie jQuery und Bootstrap. Nach den Updates wurde diese Fehlermeldung angezeigt und durch einen Neustart von Visual Studio wurde sie behoben.
Steve Hiner
0
  • Schließen Sie die Datei
  • Reinigen Sie die Lösung
  • Erstellen Sie die Lösung
  • Öffnen Sie die Datei erneut
Jeph
quelle
0

Versuchen Sie hinzuzufügen

using system.Linq.Expressions;

user1223339
quelle
4
Während dieses Code-Snippet die Frage lösen kann, hilft eine Erklärung wirklich dabei, die Qualität Ihres Beitrags zu verbessern. Denken Sie daran, dass Sie die Frage in Zukunft für Leser beantworten und diese Personen möglicherweise die Gründe für Ihren Codevorschlag nicht kennen.
Farkie
0

Ich hatte auch dieses Problem. Das Ändern targetFramework="4.5.2"in targetFramwork="4.5" in der Datei web.config hat das Problem behoben.

Maryam b
quelle
0

Wenn Sie dies nur in einer oder zwei CSHTML-Dateien erhalten ... ist es eine beschädigte Datei.

Ich habe dies mit einer beschädigten Datei geschehen lassen, die einige versteckte Unicode-Zeichen enthält. Versuchen Sie, den gesamten Text des Dokuments in eine neue Editor-Instanz zu kopieren. Löschen Sie den Inhalt der Originaldatei und speichern Sie ... Wenn die Dateilänge> 0 ist, ist etwas schief.

Löschen Sie die Datei und speichern Sie Ihre Editor-Instanz über der alten Version. Alle Fehler gingen für mich weg.

Ich habe dies in meiner Lösung einige Male erlebt. Ich bin mir nicht sicher, was es verursacht, aber ich vermute, es ist Resharper , wenn es anfängt, riesige Erinnerungsstücke in den Abgrund zu schlucken.

Bin ich der einzige, der eine Hassliebe zu Resharper hat?

user910531
quelle
0

Dies kann verursacht werden, wenn Ihre Lösung mehrere Projekte enthält, die nicht alle auf dieselbe Version von .NET Framework abzielen. Wenn Ihr Web-App-Projekt beispielsweise auf .NET 4.5 abzielt und Sie einen Assemblyverweis auf ein anderes Projekt in der Lösung haben, das auf .NET 4.5.2 abzielt. Um dies zu beheben, müssen Sie Ihre Projekte so ändern, dass alle auf dieselbe Version von .NET Framework abzielen.

Chris Pietschmann
quelle
0

Wenn keine der Antworten funktioniert, verwenden Sie diese. Ich stand vor dem gleichen Problem! Tatsächlich fehlte / wurde die Datei configuration.cs im Migrationsordner gelöscht. Ich habe den Migrationsordner gelöscht und auch die Migrationstabelle aus der Datenbank gelöscht. Als Nächstes wurden in der Package Manager Console (PM) die folgenden Befehle verwendet:

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

Dieser Prozess hat die Datei configuration.cs neu erstellt und alles hat perfekt funktioniert!

Shah Aadil
quelle
0

Überprüfen Sie Ihre Projekteigenschaften, um das Zielframework zu erhalten. Ich habe dieses Problem in meinem Projekt durch Matching für mein Zielframework behoben. .NET Framework 4.6.1 MVC 5.2.3 war die passende Lösung. Ich habe diese MVC-Version von NuGet erhalten.

Sukesh Mullassery
quelle
0

In meinem Fall bestand die Lösung darin, den ConnectionString in die Web.Config zu verschieben. Diese Anweisung sollte nach dem Abschnitt AppSettings stehen.

Rogerio Picilli
quelle
0

Ich habe ALLE oben genannten Schritte ausgeführt und am Ende festgestellt, dass das, was es für mich löst (auf einer .net Framework 4.7.1-Site mit MVC 5.2.4), dies in die root-Datei web.config innerhalb von <compilation>- hinzufügt.

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