Dlaczego na liście Dodaj odwołania nie ma System.Web.Mvc?

134

Korzystanie z C #, Visual Studio 2010.

Istnieje przestrzeń nazw o nazwie System.Web.Mvc udokumentowana w witrynie MSDN. Dokumentacja dla wszystkich typów w tej przestrzeni nazw mówi, że są w System.Web.Mvc.dll.

Jednak kiedy przechodzę do Add Reference, zakładka „.NET”, tego zestawu brakuje na liście. Czemu?

Timwi
źródło
1
Czy możesz wyjaśnić: czy Twój projekt DZIAŁA bez tego odniesienia? Czy jest to w twoim web.config (zobacz moją odpowiedź)?
Podstawowy
4
Nie pracuję nad żadnym projektem. Chciałem tylko pomóc komuś tutaj w StackOverflow. Zwykle dodaję odniesienie, aby spojrzeć na IntelliSense i / lub F12 dla dowolnego typu. W tym przypadku na liście brakowało żądanego zestawu, więc zapytałem dlaczego.
Timwi,
1
UWAGA dla czytelników tej strony - na dzień dzisiejszy (09.02.2015) metoda rozwiązania tego problemu uległa zmianie w czasie - przeczytaj wszystkie odpowiedzi - różne wersje VS.NET i. w różne miejsca.
qxotk

Odpowiedzi:

106

W VS Express 2012 nie mogłem znaleźć System.Web.Mvc w zakładce "zestawy", ale po krótkich poszukiwaniach stwierdziłem, że muszę zajrzeć do zakładki " zestawy \ rozszerzenia " zamiast domyślnych "zestawów \ frameworku" ”.

jahu
źródło
1
+1 dla Ciebie, ponieważ znalazłeś główną przyczynę problemu, który miałem. Zdecydowałem się użyć metody instalacji NuGet zakazanej poniżej i skomentuję tam, co zrobiłem.
qxotk
Wypróbowałem tę metodę w Visual Studio Community 2015, ale wystąpił błąd w czasie wykonywania związany z niezgodnością wersji ( Could not load file or assembly...The located assembly's manifest definition does not match the assembly reference). Mam inny projekt w moim rozwiązaniu, który odwołuje się do innej wersji, a ta metoda pozwoliła mi tylko dodać odwołanie do System.Web.Mvc, Version = 4.0.0.0. Metoda instalacji NuGet dodała poprawną wersję
NJS
104

Najlepszym sposobem jest użycie menedżera pakietów NuGet.

Po prostu zaktualizuj poniższy pakiet MVC i powinien działać.

wprowadź opis obrazu tutaj

sandeep talabathula
źródło
4
Muszę przyznać, że w większości przypadków jest to właściwy sposób dodawania referencji do MVC (powinno to oszczędzić problemów z uruchamianiem aplikacji poza Visual Studio, które mogą powodować złe odwołania). Jednak w dużych rozwiązaniach, które już zawierają niektóre projekty MVC, użycie opcji „Zarządzaj pakietami NuGet dla rozwiązania” do zainstalowania tej samej wersji biblioteki jest jeszcze lepsze. Powodem jest to, że jeśli po prostu zainstalujesz je z menedżera pakietów NuGet, możesz skończyć z niezgodnością wersji (menedżer zwykle zaoferuje ci najnowszą wersję).
jahu
2
Użyłem tego rozwiązania w projekcie używającym MVC 4, którego nie można skompilować z Visual Studio 2015. Zapewnia również, że biblioteki projektu są jednolite dla wszystkich programistów.
ceetheman
1
Miałem ten problem z pudełkiem, na którym był tylko VS2015, podczas gdy inni członkowie zespołu mieli VS2013 - który mógł odwoływać się do starej lokalizacji (bez błędów kompilacji), podczas gdy ja nie miałem kodu i błędów kompilacji. Warto zauważyć, że na dzień dzisiejszy nie mogę znaleźć pliku Microsoft.Web.Mvc - które były odniesieniami, które spowodowały problem. W odpowiedzi z @forderah rzuca światło na fakt, że nazwa w NuGet jest inna. Microsoft.Web.Mvc to teraz Microsoft.AspNet.Mvc, który również pobiera zależności wymienione w jego odpowiedzi.
qxotk
1
Miałem nawet ten problem w VS2017 i to go naprawiło. Nie jestem pewien, dlaczego VS2017 powiedział mi, że uważa, że ​​zestaw, do którego należy się odwoływać, to System.Web.Mvc, podczas gdy w rzeczywistości szuka Microsoft.AspNet.Mvc
Michael Davidson
60

Miałem ten sam problem i nie mogłem zlokalizować zestawu referencyjnego System.Web.MVC.

W końcu się dowiedział i znajdował się w następującej lokalizacji.

Uwaga, jeśli twój VS został zainstalowany w C: (czasami MVC.dll nie znajduje się w domyślnej lokalizacji, o której wszyscy mówią, mam na myśli folder „ Reference Assemblies ” znajdujący się na dysku C :) .

jeśli go tam nie ma, zdecydowanie powinno być tutaj:

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

Więc dodaj bibliotekę dll za pomocą nawigacji lub karty przeglądania w menu dodawania odwołań.

Patrick Hofman
źródło
1
W ten sposób uzyskam referencję dla mnie, chociaż jestem pewien, że wcześniej dodałem to odwołanie za pośrednictwem listy zestawów Framework.
Zarepheth
9
Niezbyt dobre rozwiązanie, jeśli pracujesz w zespole z VCS. W tym przypadku ścieżki absolutne są złe.
Denis The Menace
Zdecydowanie zgadzam się, że jest to złe rozwiązanie w jakimkolwiek środowisku programistycznym ze względu na zakodowaną na stałe zależność od ścieżki bezwzględnej.
Craig
Sposób obejścia tego polega na upewnieniu się, że wszyscy używają tej samej ścieżki dla biblioteki DLL. Nie powinno być problemu, jeśli wszyscy członkowie zespołu mają zainstalowane zestawy w tej lokalizacji, tak jak powinni. Alternatywnie bibliotekę DLL można skopiować z tej ścieżki i umieścić bezpośrednio w projekcie, aby miała ścieżkę względną. Ale tak czy inaczej, po prostu ustalenie lokalizacji, w której znajduje się ta biblioteka DLL, jest dobrym punktem wyjścia.
vapcguy
To naprawdę pomogło; ale Microsoft powinien był uczynić to znacznie bardziej
przejrzystym
28

Możesz również dodać to z konsoli Menedżera pakietów Nuget, na przykład:

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

Microsoft.AspNet.Mvc ma zależności od:

  • „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)”

... co wydaje mi się mało ważne. W naszym przypadku jest to biblioteka klas, która istnieje wyłącznie w celu zapewnienia wsparcia dla naszych aplikacji Mvc. Więc uważamy, że w najgorszym przypadku jest to łagodna zależność.

Zdecydowanie wolę to niż wskazywanie na zestaw w systemie plików lub w GAC, ponieważ aktualizacja pakietu w przyszłości prawdopodobnie będzie o wiele mniej bolesna niż doświadczenia, które miałem z odniesieniami do GAC i zestawów systemu plików w przeszłości.

fordareh
źródło
1
Użyłem tej metody i zgadzam się nie używać lokalnych ścieżek bezwzględnych w odniesieniach. Użyłem menedżera pakietów NuGet, dodając pakiet i zależności rozwiązałem problem z moim pudełkiem tylko VS2015.
qxotk
11

Miałem ten sam problem i oto zabawny powód: Domyślam się, że spodziewasz System.Web.Mvcsię, że znajdziesz się pod System.Weblistą. Ale lista nie jest alfabetyczna.

Najpierw posortuj listę, a następnie spójrz w pobliżu System.Web.

Alican
źródło
1
Upewnij się również, że otrzymujesz poprawną wersję. W moim przypadku są tam System.Web.Mvc v2 i v4 i one też nie są obok siebie.
TTT,
Miałem ten sam problem ze znalezieniem System.Web.Mvc z tych samych powodów. Zamiast tego wybrałem Microsoft.AspNet.Mvc, upewniając się, że sprawdzę, jakie inne projekty w moim rozwiązaniu wykorzystywały pod względem numeru wersji.
qxotk
5

„OK, dodanie tego XML do Web.config działa, ale nie daje odpowiedzi na pytanie”

Powinien tam być. Domyślnie lista dodawania odniesień wydaje się być uporządkowana, ale tak nie jest. Naciśnij nagłówek nazwy i spójrz ponownie.

eglasius
źródło
Rzadko mówię „tego zespołu brakuje na liście”, chyba że jestem tego pewien.
Timwi,
@Timwi Pomyślałem, ale biorąc pod uwagę inną odpowiedź, jest bardzo mała szansa, że ​​jej tam nie ma z zainstalowanym vs 2010 i że w moim przypadku zawsze znajdowałem to, czego potrzebuję na liście referencji, bez naciskania nagłówka nazwy, który miałem żeby to powiedzieć ... faktycznie, teraz już wiem, dlaczego nigdy wcześniej nie musiałem tego robić, aw porównaniu z 2010 r. tak - zobacz pierwszy komentarz: weblogs.asp.net/scottgu/archive/2009/10/29/ ...
eglasius
Więc mówisz, że kliknięcie nagłówka Nazwa posortuje rzeczy za Ciebie? Nic nie robi na mojej maszynie ...
Roman Starkov
1
@romkyns działa tylko po załadowaniu wszystkich zestawów na liście.
eglasius
5

Sprawdź ten krok:

  1. Sprawdź, czy MVC jest poprawnie zainstalowany.
  2. Sprawdź właściwość projektu i zobacz, jaka jest struktura docelowa projektu. Jeśli platforma docelowa nie jest ustawiona na .Net Framework 4, ustaw ją.

Uwaga : jeśli struktura docelowa jest ustawiona na .Net Framework 4 Client Profile, nie będzie wyświetlać referencji MVC na liście referencji. Różnice między .Net Framework 4 a .Net Framework 4 Client Profile można znaleźć tutaj .

.NET Framework 4 Client Profile jest podzbiorem .NET Framework 4 zoptymalizowanym pod kątem aplikacji klienckich. Zapewnia funkcje dla większości aplikacji klienckich, w tym Windows Presentation Foundation (WPF), Windows Forms, Windows Communication Foundation (WCF) i funkcje ClickOnce. Umożliwia to szybsze wdrażanie i mniejszy pakiet instalacyjny dla aplikacji przeznaczonych dla profilu klienta .NET Framework 4.

Iman
źródło
To była dobra wskazówka. Kiedy przeszedłem do właściwości mojego projektu, wymieniłem tylko .NET Core 1 i 2. Brak .NET Framework 4.x. Brakowało mi zespołów na mojej liście. Okazuje się, że tak właśnie zbudowałem swój projekt - wybrałem złą opcję - aby użyć .NET Core zamiast .NET Framework. Teraz znam różnicę. :)
vapcguy
4

Rozwiązałem ten problem, wyszukując „mvc”. System.Web.Mvc pojawił się w wynikach wyszukiwania, mimo że nie ma go na liście.

zety
źródło
3

Żądany zestaw pojawił się teraz na liście.

Mogę tylko spekulować, co spowodowało jego pojawienie się, ale podejrzewam, że jest to fakt, że wybrałem PlikNowyProjektAplikacja internetowa ASP.NET , czego nigdy wcześniej nie robiłem. Możliwe, że spowodowało to jakąś późną inicjalizację i zapełnienie listy dodatkowymi zestawami do tworzenia stron WWW.

Timwi
źródło
na pewno zawsze tam był, jest ok: P ... zobacz komentarz, który dodałem do mojej odpowiedzi, w linku, który mówi: „Problem z kartą .net polega na tym, że gdy trwa asynchronizacja i jest ona odświeżana, jej nie sortowanie w porządku alfabetycznym… ”… co jest nowym zachowaniem w porównaniu z 2010, nigdy nie zdawałem sobie z tego sprawy, dopóki nie zobaczyłem twojego pytania.
eglasius
@egl Właśnie przetestowałem na moim komputerze tutaj (VS2010) i nie ma go wcale na liście. Dostaję różne zestawy zestawów w zależności od platformy docelowej, ale tego nigdy nie ma.
Roman Starkov
@romkyns spróbuj skierować na .net 4 i zrobić to, o czym wspomniałem w mojej odpowiedzi. Upewnij się również, że masz wystarczająco dużo czasu na załadowanie, ponieważ wykonuje ładowanie asynchroniczne.
eglasius
2

Zmieniło się to w przypadku Visual Studio 2012 (wiem, że pierwotne pytanie brzmi VS2010, ale tytuł nadal będzie trafiał w wyszukiwaniach).

Podczas tworzenia projektu VS2012 MVC plik system.web.mvc jest umieszczany w folderze pakietów, który jest równorzędny z rozwiązaniem. Będzie to domyślnie wskazywane w projekcie sieci Web i możesz znaleźć tam dokładną ścieżkę).

Jeśli chcesz odwołać się do tego w drugorzędnym projekcie (na przykład wspierający plik .dll z filtrami lub innymi atrybutami), możesz odwołać się do niego z tego miejsca.

Prof Von Lemongargle
źródło
2

Nie dostałem System.Web.Mvc w VS 2012, ale dostałem go w VS 2013. Używając AddReference Dialog, wprowadź opis obrazu tutaj

Lub możesz to znaleźć na ścieżce projektu,

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

Md Shahriar
źródło
Świetna wskazówka pokazująca, gdzie znaleźć w istniejącej ścieżce projektu. Dzięki!
Alan
0

Wierzę, że stwierdzisz, że zestaw MVC jest przywoływany w pliku web.config, a nie w samym projekcie.

Coś takiego:

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

Aby odpowiedzieć na Twój komentarz;

Najlepsza odpowiedź, jaką mogę udzielić, jest tutaj :

Element add dodaje odwołanie do zestawu do użycia podczas kompilacji zasobu dynamicznego. ASP.NET automatycznie łączy ten zestaw z zasobem podczas kompilowania każdego modułu kodu.

Podstawowy
źródło
OK, dodanie tego XML do Web.config działa, ale nie daje odpowiedzi na pytanie.
Timwi,
„działa” tak, jak zapewnia inteligencję? Zmieniłem moją odpowiedź
Podstawowa
0

może być zainstalowany osobno i nie jest uwzględniony w framwork, wybierz listę zakładek "rozszerzenia" i istnieje jest tam i więcej innych bibliotek, wszystko jest w porządku, nie jest potrzebne do używanych starych bibliotek itp., istnieje stare 20 30 i 4001

user1005462
źródło
0

Jeśli napotkasz ten problem w programie Visual Studio 2017, prawdopodobnie pracujesz z projektem MVC 4 utworzonym w poprzedniej wersji programu VS z wskazującą ścieżką wskazówki odniesienia C:\Program Files (x86)\Microsoft ASP.NET. Program Visual Studio 2017 nie instaluje już tego katalogu.

Zwykle rozwiązujemy ten problem, instalując kopię programu Visual Studio 2015 wraz z naszym wystąpieniem 2017 i instalując niezbędne biblioteki w powyższej ścieżce. Następnie aktualizujemy wszystkie odniesienia w projektach, których dotyczy problem i możemy zaczynać.

JD Mallen
źródło