Warum ist System.Web.Mvc nicht unter Verweise hinzufügen aufgeführt?

132

Verwenden von C #, Visual Studio 2010.

Auf MSDN ist ein Namespace namens System.Web.Mvc dokumentiert. Die Dokumentation für alle Typen in diesem Namespace besagt, dass sie sich in befinden System.Web.Mvc.dll.

Wenn ich jedoch zur Registerkarte "Referenz hinzufügen" auf der Registerkarte ".NET" gehe, fehlt diese Assembly in der Liste. Warum?

Timwi
quelle
1
Können Sie klarstellen: FUNKTIONIERT Ihr Projekt ohne diesen Hinweis? Ist es in Ihrer web.config (siehe meine Antwort)?
Basic
4
Ich arbeite an keinem Projekt. Ich wollte nur jemandem hier auf StackOverflow helfen. Normalerweise füge ich eine Referenz hinzu, um IntelliSense und / oder F12 für jeden Typ zu betrachten. In diesem Fall fehlte die gewünschte Baugruppe in der Liste, daher fragte ich warum.
Timwi
1
HINWEIS für Leser dieser Seite - seit heute (09.02.2015) hat sich die Methode zur Lösung dieses Problems im Laufe der Zeit geändert - lesen Sie alle Antworten - verschiedene Versionen von VS.NET und .NET Framework verschieben den für MVC referenzierten Code in zu verschiedenen Orten.
Qxotk

Antworten:

106

In VS Express 2012 konnte ich System.Web.Mvc nicht auf der Registerkarte "Assemblys" finden, aber nach einigem Suchen stellte ich fest, dass ich eher auf die Registerkarte " Assemblys \ Erweiterungen " als auf die Standardregisterkarte "Assemblys \ Framework" schauen muss "tab.

jahu
quelle
1
+1 für Sie, weil Sie die Grundursache für das Problem gefunden haben, das ich hatte. Ich habe mich für die unten beschriebene NuGet-Installationsmethode entschieden und werde dort kommentieren, was ich getan habe.
Qxotk
Ich habe diese Methode in Visual Studio Community 2015 ausprobiert, aber es wurde ein Laufzeitfehler im Zusammenhang mit der Inkompatibilität der Version ( Could not load file or assembly...The located assembly's manifest definition does not match the assembly reference) angezeigt . Ich habe ein anderes Projekt in meiner Lösung, das auf eine andere Version verweist, und diese Methode erlaubte mir nur, einen Verweis auf System.Web.Mvc, Version = 4.0.0.0, hinzuzufügen. Die NuGet-Installationsmethode fügte die richtige Version hinzu
NJS
100

Am besten verwenden Sie den NuGet-Paketmanager.

Aktualisieren Sie einfach das folgende MVC-Paket und es sollte funktionieren.

Geben Sie hier die Bildbeschreibung ein

Sandeep Talabathula
quelle
4
Ich muss zugeben, dass dies in den meisten Fällen der richtige Weg ist, um einen Verweis auf MVC hinzuzufügen (dies sollte Ihnen die Probleme beim Ausführen der App außerhalb von Visual Studio ersparen, die durch schlechte Verweise verursacht werden könnten). Bei großen Lösungen, die bereits einige Projekte mit MVC enthalten, ist es jedoch noch besser, "NuGet-Pakete für Lösung verwalten" zu verwenden, um dieselbe Version der Bibliothek zu installieren. Der Grund dafür ist, dass Sie möglicherweise eine Versionsinkompatibilität haben, wenn Sie sie nur über den NuGet-Paketmanager installieren (der Manager bietet Ihnen normalerweise die neueste Version an).
Jahu
2
Ich habe diese Lösung für ein Projekt mit MVC 4 verwendet, das nicht mit Visual Studio 2015 kompiliert werden konnte. Außerdem wird sichergestellt, dass die Projektbibliotheken über alle Entwickler hinweg einheitlich sind.
Ceetheman
1
Ich hatte dieses Problem mit einer Box, auf der nur VS2015 installiert war, während andere Teammitglieder VS2013 hatten. Möglicherweise haben sie auf den alten Speicherort verwiesen (keine Build-Fehler), während ich keinen Code und keine Build-Fehler hatte. Bemerkenswerterweise konnte ich Microsoft.Web.Mvc bis heute nicht finden - das waren die Referenzen, die das Problem verursacht haben. In der Antwort von @forderah wird deutlich, dass der Name in NuGet anders ist. Microsoft.Web.Mvc ist jetzt Microsoft.AspNet.Mvc, das auch die in seiner Antwort aufgeführten Abhängigkeiten berücksichtigt.
Qxotk
1
Ich hatte sogar dieses Problem in VS2017 und das hat es behoben. Ich bin mir nicht sicher, warum VS2017 mir gesagt hat, dass die Assembly, auf die verwiesen werden muss, System.Web.Mvc ist, während tatsächlich nach Microsoft.AspNet.Mvc gesucht wird
Michael Davidson
60

Ich hatte das gleiche Problem und konnte die System.Web.MVC-Referenzbaugruppe nicht finden.

Endlich herausgefunden und es befand sich an der folgenden Stelle.

Hinweis: Wenn Ihr VS in C: installiert wurde: (Manchmal befindet sich die MVC.dll nicht an dem Standardspeicherort, über den alle sprechen. Ich meine den Ordner " Reference Assemblies " im Laufwerk C :)

Wenn es nicht da ist, sollte es definitiv hier sein:

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

Fügen Sie die DLL über die Navigation oder die Registerkarte Durchsuchen im Menü Referenz hinzufügen hinzu.

Patrick Hofman
quelle
1
Dies erhält die Referenz für mich, obwohl ich sicher bin, dass ich diese Referenz zuvor über die Liste der Framework-Baugruppen hinzugefügt habe.
Zarepheth
9
Keine wirklich gute Lösung, wenn Sie in einem Team mit VCS arbeiten. Absolute Wege sind in diesem Fall böse.
Denis die Bedrohung
Stimmen Sie auf jeden Fall zu, dass dies aufgrund der fest codierten absoluten Pfadabhängigkeit eine schlechte Lösung in jeder Art von Teamentwicklungsumgebung ist.
Craig
Um dies zu umgehen, müssen Sie sicherstellen, dass alle denselben Pfad für die DLL verwenden. Es sollte kein Problem sein, wenn alle Teammitglieder die Baugruppen an diesem Ort installiert haben, wie sie sollten. Alternativ kann die DLL von diesem Pfad kopiert und direkt in das Projekt eingefügt werden, sodass sie einen relativen Pfad hat. Aber so oder so ist es ein guter Ausgangspunkt, nur den Ort zu haben, an dem sich diese DLL befindet.
Vapcguy
Das hat wirklich geholfen; aber Microsoft hätte dies viel sauberer und einfacher machen sollen ...
JosephDoggie
28

Sie können dies auch über die Nuget Package Manager-Konsole hinzufügen.

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

Microsoft.AspNet.Mvc hat Abhängigkeiten von:

  • '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)'

... was mir kein Problem erscheint. In unserem Fall handelt es sich um eine Klassenbibliothek, die ausschließlich zur Unterstützung unserer Mvc-Apps dient. Wir glauben also, dass es im schlimmsten Fall eine harmlose Abhängigkeit ist.

Ich ziehe es definitiv vor, auf eine Assembly im Dateisystem oder im GAC zu verweisen, da das Aktualisieren des Pakets in Zukunft wahrscheinlich weniger schmerzhaft sein wird als die Erfahrungen, die ich mit den GAC- und Dateisystem-Assemblyreferenzen in der Vergangenheit gemacht habe.

fordareh
quelle
1
Ich habe diese Methode verwendet und bin damit einverstanden, in den Referenzen keine lokalen absoluten Pfade zu verwenden. Ich habe den NuGet-Paketmanager verwendet und das Paket hinzugefügt. Abhängigkeiten haben das Problem auf meiner Nur-VS2015-Box behoben.
Qxotk
11

Ich hatte das gleiche Problem und hier ist der lustige Grund: Ich vermute, dass Sie erwarten System.Web.Mvc, unter System.Webin der Liste zu sein. Die Liste ist jedoch nicht alphabetisch.

Sortieren Sie zuerst die Liste und schauen Sie dann in die Nähe von System.Web.

Alican
quelle
1
Stellen Sie außerdem sicher, dass Sie die richtige Version erhalten. In meinem Fall sind System.Web.Mvc v2 und v4 vorhanden, und auch sie befinden sich nicht nebeneinander.
TTT
Hatte aus den gleichen Gründen das gleiche Problem beim Finden von System.Web.Mvc. Ich habe mich stattdessen für Microsoft.AspNet.Mvc entschieden, um zu überprüfen, welche anderen Projekte in meiner Lösung in Bezug auf die Versionsnummer verwendet wurden.
Qxotk
5

"OK, das Hinzufügen dieses XML zur Web.config funktioniert, aber es beantwortet die Frage nicht."

Es sollte da sein. Standardmäßig scheint die Liste der hinzugefügten Referenzen geordnet zu sein, dies ist jedoch nicht der Fall. Klicken Sie auf die Namensüberschrift und schauen Sie erneut.

eglasius
quelle
Ich sage nicht oft "diese Baugruppe fehlt in der Liste", es sei denn, ich bin mir sicher.
Timwi
@ Timwi Ich dachte mir, aber angesichts der anderen Antwort, dass es kaum eine Chance gibt, dass es nicht mit vs 2010 installiert ist und dass ich in meinem Fall immer das gefunden habe, was ich brauche, in der Referenzliste, ohne jemals den Namenskopf zu treffen, den ich hatte um es zu sagen ... in der Tat weiß ich jetzt, warum ich es noch nie zuvor tun musste und im Vergleich zu
eglasius
Wollen Sie damit sagen, dass durch Klicken auf die Überschrift "Name" die Dinge für Sie sortiert werden? Tut hier auf meiner Maschine nichts ...
Roman Starkov
1
@romkyns funktioniert nur, nachdem alle Assemblys in der Liste geladen wurden.
Eglasius
5

Überprüfen Sie diesen Schritt:

  1. Überprüfen Sie, ob MVC ordnungsgemäß installiert ist.
  2. Überprüfen Sie die Projekteigenschaft und sehen Sie, was das Projektziel-Framework ist. Wenn das Zielframework nicht auf .NET Framework 4 festgelegt ist, legen Sie es fest.

Hinweis : Wenn das Zielframework auf .NET Framework 4-Clientprofil festgelegt ist, wird die MVC-Referenz nicht in der Referenzliste aufgeführt. Sie können zwischen .NET Framework 4 und .NET Framework 4 Client Profile unterschiedlich finden hier .

Das .NET Framework 4-Clientprofil ist eine Teilmenge von .NET Framework 4, die für Clientanwendungen optimiert ist. Es bietet Funktionen für die meisten Clientanwendungen, einschließlich Windows Presentation Foundation (WPF), Windows Forms, Windows Communication Foundation (WCF) und ClickOnce-Funktionen. Dies ermöglicht eine schnellere Bereitstellung und ein kleineres Installationspaket für Anwendungen, die auf das .NET Framework 4-Clientprofil abzielen.

Iman
quelle
Das war ein guter Tipp. Als ich zu den Eigenschaften meines Projekts ging, wurden nur .NET Core 1 und 2 aufgelistet. Kein .NET Framework 4.x. Ich habe Baugruppen in meiner Liste vermisst. Es stellte sich heraus, dass ich mein Projekt so erstellt habe - ich habe die falsche Option gewählt -, um .NET Core anstelle von .NET Framework zu verwenden. Jetzt kenne ich den Unterschied. :)
Vapcguy
4

Ich habe dieses Problem durch die Suche nach "mvc" gelöst. Das System.Web.Mvc wurde in den Suchergebnissen angezeigt, obwohl es nicht in der Liste enthalten ist.

zety
quelle
3

Die gewünschte Baugruppe wurde jetzt in der Liste angezeigt.

Ich kann nur spekulieren, warum es angezeigt wurde, aber ich vermute, dass ich DateiNeuProjektASP.NET-Webanwendung aufgerufen habe , was ich noch nie zuvor getan hatte. Es ist möglich, dass dies zu einer späten Initialisierung führte und die Liste mit zusätzlichen Assemblys für die Webentwicklung gefüllt wurde.

Timwi
quelle
es war immer sicher immer da, es ist in Ordnung: P ... siehe den Kommentar, den ich zu meiner Antwort hinzugefügt habe, in dem Link, der besagt: "Das Problem mit der Registerkarte .net ist, während der Asynchronisierung stattfindet und es aktualisiert wird, ist es nicht in alphabetischer Reihenfolge sortieren ... "... was ein neues Verhalten gegenüber 2010 ist, das habe ich erst bemerkt, als ich Ihre Frage gesehen habe.
Eglasius
@egl Ich habe gerade hier auf meinem Computer getestet (VS2010) und es ist überhaupt nicht in der Liste. Ich bekomme je nach Target Framework unterschiedliche Sätze von Assemblys, aber diese ist nie da.
Roman Starkov
@romkyns versuchen, auf .net 4 abzuzielen und das zu tun, was ich in meiner Antwort erwähnt habe. Stellen Sie außerdem sicher, dass genügend Zeit zum Laden vorhanden ist, da das Laden asynchron ausgeführt wird.
Eglasius
2

Dies hat sich für Visual Studio 2012 geändert (ich weiß, dass die ursprüngliche Frage VS2010 lautet, aber der Titel wird bei Suchvorgängen weiterhin angezeigt).

Wenn Sie ein VS2012-MVC-Projekt erstellen, wird die Datei system.web.mvc im Paketordner abgelegt, der der Lösung entspricht. Dies wird standardmäßig im Webprojekt referenziert und Sie können den genauen Pfad dort finden.

Wenn Sie dies in einem sekundären Projekt referenzieren möchten (z. B. eine unterstützende DLL mit Filtern oder anderen Attributen), können Sie von dort aus darauf verweisen.

Prof. Von Lemongargle
quelle
2

Ich habe System.Web.Mvc in VS 2012 nicht erhalten, aber in VS 2013. Mit AddReference Dialog, Geben Sie hier die Bildbeschreibung ein

Oder Sie finden dies in Ihrem Projektpfad.

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

Md Shahriar
quelle
Toller Tipp, der zeigt, wo im vorhandenen Projektpfad zu finden ist. Vielen Dank!
Alan
0

Ich glaube, Sie werden feststellen, dass auf die MVC-Assembly in der Datei web.config verwiesen wird, nicht im Projekt selbst.

Etwas wie das:

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

Um auf Ihren Kommentar zu antworten;

Die beste Antwort, die ich geben kann, ist von hier :

Das Element add fügt eine Assemblyreferenz hinzu, die beim Kompilieren einer dynamischen Ressource verwendet werden soll. ASP.NET verknüpft diese Assembly beim Kompilieren jedes Codemoduls automatisch mit der Ressource.

Basic
quelle
OK, das Hinzufügen dieses XML zur Web.config funktioniert, aber es beantwortet die Frage nicht.
Timwi
"funktioniert" wie darin die Intellisense liefert? Ich habe meine Antwort bearbeitet
Basic
0

Es kann separat installiert werden und ist nicht in Framwork enthalten. Wählen Sie die Registerkartenliste "Erweiterungen" und es gibt dort und weitere andere Bibliotheken. Alles ist in Ordnung, um alte Bibliotheken usw. nicht zu verwenden. Es gibt alte 20 30 und 4001

user1005462
quelle
0

Wenn Sie dieses Problem in Visual Studio 2017 haben, arbeiten Sie wahrscheinlich mit einem MVC 4-Projekt, das in einer früheren Version von VS erstellt wurde und auf das ein Referenzhinweispfad verweist C:\Program Files (x86)\Microsoft ASP.NET. Visual Studio 2017 installiert dieses Verzeichnis nicht mehr.

Wir lösen dieses Problem normalerweise, indem wir eine Kopie von Visual Studio 2015 neben unserer 2017-Instanz installieren und die erforderlichen Bibliotheken im obigen Pfad installieren. Dann aktualisieren wir alle Referenzen in den betroffenen Projekten und es kann losgehen.

JD Mallen
quelle