Typ „Expression <>” jest zdefiniowany w zestawie, do którego nie ma odwołania

84

W ASP.NET MVC 4.5.2 Framework.

po wpisaniu

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

z uwagi

Pojawia się błąd: typ „Expression <>” jest zdefiniowany w zestawie, do którego nie ma odwołania. Należy dodać odwołanie do zestawu „System.Core, Version = 4.0.0.0, Culture = neutral, PublicKeyToken = b77a5c561934e089”.

Dodałem odwołanie do zestawu System.Core.dll, wersja 4.0.0.0, wersja środowiska wykonawczego v4.0.30319. a także zrobiłem w web.config

mansoor
źródło
Możliwy duplikat VS 2015 IntelliSense: Błąd odwołania do
Owen Pauling

Odpowiedzi:

41

Pracowałem w tym samym numerze, co Ty, choć znacznie później. Problem polegał na tym, że nie mogłem uzyskać dostępu do widoków Razor (.cshtml), ponieważ otrzymywałem błąd informujący o braku odwołania do zestawu, a mianowicie System.Web.Mvc, mimo że znajdowało się ono w odwołaniach do projektu. Po zbadaniu zauważyłem, że zainstalowana wersja NuGet to 5.2.3, podczas gdy projekt wymagał 5.2.0. Rozwiązaniem jest obniżenie wersji MVC.

  1. Przejdź do Project-> NuGet Package Manager.
  2. Wyszukaj MVC; to będzie pierwszy wynik.
  3. Następnie wybierz opcję obniżenia z listy rozwijanej w szczegółach pakietu NuGet i prześlij.

Potwierdź wszystkie okna dialogowe i jesteś gotowy do pracy.

Prashant2008
źródło
14
Jak zauważyłeś, że Twój projekt wymaga 5.2.0?
Vanice
3
@Vanice Myślę, że to zależy od wersji .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. (Nie potwierdzono)
JoaoRibeiro,
9
Używam .net 4.7 i nadal mam ten irytujący błąd
Sven
1
Miałem ten sam problem, okazuje się, że moja wartość debugowania w pliku web.config była ustawiona na false. Ustaw ją na „True” <compilation debug = "true" targetFramework = "4.5" /> <httpRuntime targetFramework = "4.5" />
mlaribi,
Wypróbowałem powyższe rozwiązanie, które działa dobrze. Moja wersja VS Solution była 4.6.2 i obniżyłem MVC do 5.2.3 z 5.2.4. Więc dowiedziałem się, że MVC 5.2.3 jest kompatybilny z .Net 4.6.2
Ibrahim Inam
58

Nie jestem pewien, czy nadal masz ten problem, czy nie, ale miałem również ten sam problem.

Udało mi się znaleźć tutaj rozwiązania

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

Mam nadzieję, że to pomoże..

ctm1988
źródło
już to powiedziałem ... Spróbowałem tego przed wysłaniem tego pytania. w każdym razie dziękuję wam
obojgu
1
w porządku! To działa. Zauważ, że powinieneś zamknąć i ponownie otworzyć plik cshtml, aby odniosło skutek.
Mahdi Ataollahi
To zadziałało, gdy przejrzałem wszystkie pliki web.config i upewniłem się, że wersje są zgodne, jak na stackoverflow.com/a/37381294/8684119
AMG
Działa, ale uznałem to rozwiązanie za trochę brudne. Zresztą w moim przypadku dodam tylko odwołanie do System.Core
T-moty
45

Ten błąd oznacza, że ​​program Visual Studio nie może zlokalizować zestawu System.Web.Mvc, aby zasilić jego inteligencję dla widoków Razor. Do rozwiązania tego problemu może być wymagana jedna lub obie z poniższych czynności.

  1. Upewnij się, że wersja platformy .NET Framework dla właściwości kompilacji w głównym pliku web.config (ta w katalogu głównym witryny sieci Web) jest taka sama, jak określona we właściwościach projektu.

[root] /Web.config:

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

Właściwości projektu:

Właściwości projektu

  1. Upewnij się, że wersja zestawu MVC określona w pliku web.config widoków (ta w folderze widoków) jest taka sama, jak zestaw MVC, którego używasz w projekcie.

[folder widoków] /web.config:

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

Właściwości odniesienia zespołu MVC:

Wersja MVC

Tom Bowers
źródło
3
To zadziałało dla mnie. Wielkie dzięki.
vibs2006
1
To również rozwiązało problem dla mnie, ale nie bezpośrednio. Musiałem usunąć plik z niewłaściwą wersją z mojego folderu bin, zaktualizować mvc przez nuget, a następnie umieścił poprawną wersję w moim folderze bin i zadziałało. jeśli nadal otrzymujesz niewłaściwą wersję w folderze bin po aktualizacji przez nuget, usuń istniejącą w folderze bin
Joshua K
Dziękuję Ci. Zaktualizowałem Microsoft.AspNet.Mvc przez NuGet do wersji 5.2.7 i zacząłem widzieć ten błąd w pliku .schtml, gdy aplikacja nadal działała. Okazało się, że web.config w folderze Views pod <system.web.webPages.razor> to nadal wersja 5.2.3. Modyfikacja do wersji 5.2.7 pomogła.
vkelman
To zadziałało - dziękuję! Pamiętanie o sprawdzeniu [Widoki] /web.config było dla mnie kluczowe. Wersja dopasowana wszędzie, ale tam!
Jay Dawkins
21
  • Zamknij plik cshtml
  • Odbuduj rozwiązanie
  • Otwórz plik cshtml
  • Nadal błędy? Uruchom ponownie program Visual Studio
  • Nadal błędy? Użyj odpowiedzi ctm1988
CularBytes
źródło
Próbowałem wszystkiego, co zostało tutaj wymienione ... ale nadal nie działa ... podczas ponownej instalacji Visual Studio działa idealnie .. Pomyślałem, że brak zależności jest przyczyną ...
mansoor
jeśli masz projekt, który działał i był w porządku, a nagle pojawił się ten problem, to prawdopodobnie jest to poprawka!
Simon_Weaver
Nie mogę uwierzyć, jak często to działa
nmit026
16

Wypróbowałem większość z nich, co ostatecznie zadziałało, to wyładowanie projektu, edycja pliku csproj i dodanie następujących elementów:

<Reference Include="System.Core" />

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

leyla azari
źródło
2
to działa! wygląda na to, że studium wizualne uważa, że ​​System.Core został już dodany, ale tak naprawdę nie jest. Musisz więc zrobić to ręcznie
isxaker
10

Usunięcie pliku [nazwa projektu ] .csproj.user z katalogu projektu pomogło mi.

Robo Burned
źródło
Pracował dla mnie Vs 2017 Asp MVC5
Speuline
2
Ten działał, VS 2019 i MVC5. Wyczyściłem również foldery bin / obj i .vs.
Leniency
7

Miałem dokładnie ten sam problem i żadne z rozwiązań nie rozwiązało problemu. Musiałem to dodać do swojego web.configwnętrzaSystem.Web

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

Usunąłem go podczas zmiany niektórych elementów configwokół.

jsanman
źródło
proszę dodać tag z dowolną technologią lub więcej .. Nie znaleziono tagów
Vikrant Kashyap
Dodanie atrybutu compilation / targetFramework działało dla mnie.
Tom Bowers
Przypadkowo dodałem dwie różne wartości dla platformy docelowej, co rozwiązało mój problem.
Geethanga
To rozwiązało problem dla mnie, hybrydowej aplikacji asp.net/webforms: zaktualizowałem docelową strukturę mojej aplikacji do wersji 4.7, nie zauważyłem, że te dwa ustawienia web.config nadal wskazują na 4.5.
Tom Regan,
ten sam problem został rozwiązany przez tę odpowiedź w dniu 4.8
Mamdouh
4

W moim przypadku ten komunikat był wyświetlany tylko wtedy, gdy włączony był Resharper. Wyczyściłem pamięć podręczną Resharper, zrestartowałem VS, wyłączyłem Resharper i włączyłem go ponownie. Wiadomość zniknęła.

Neshta
źródło
1
W moim przypadku po prostu zamknij i uruchom ponownie VS. Mam resharper, ale nie musiałem nic z tym robić.
JayJay
3

Miałem ten sam problem z brakującym montażem i zdarzyło się, że kompilacja VS2017 nie skopiowała go poprawnie do folderu Bin. Te kroki pomogły mi:

  • Przejdź do węzła odwołania projektu sieci Web
  • Znajdź odniesienie do System.Core
  • Otwórz okno właściwości VS
  • W oknie właściwości zmień Copy Local: False na True

z tego komentarza: CS0012: Typ '##### Dowolny typ #####' jest zdefiniowany w zestawie, do którego nie ma odniesienia

Angel_D
źródło
Chociaż ten link może odpowiedzieć na pytanie, lepiej jest zawrzeć tutaj zasadnicze części odpowiedzi i podać link do odniesienia. Odpowiedzi zawierające tylko łącze mogą stać się nieprawidłowe, jeśli połączona strona ulegnie zmianie. - Z recenzji
Steve Gomez,
1
@SteveG. Dzięki, Steve! Edytowałem to. Nie komentowałem zbyt wiele wcześniej i brakuje mi etykiety SO ... :-)
Angel_D
1
Ten rozwiązał mój problem, muszę wspomnieć, że potrzebny był również restart Visual Studio, dziękuję.
Saeed Mousavi
3

W Web.config musiałem zmienić:

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

do

  <system.web>
    <httpRuntime targetFramework="4.7" />
    <compilation debug="true" targetFramework="4.7">
juFo
źródło
1
Dziękuję, @juFo! To naprawić to dla mnie w Visual Studio 2019 z ram docelowej MVC 5. Mój MVC projektu było 4.7.2, natomiast web.config jeszcze 4.7.1 Dla targetFrameworkw <httpRuntime>i <compilation>tagów. Po prostu zaktualizowanie atrybutu, aby poprawnie odzwierciedlał wersję .NET Framework projektu, naprawiło to za mnie.
iCode
2

Sprawdź, czy akcja kompilacji pliku cshtml jest ustawiona na „Zawartość”.

Używam ReSharper i zauważyłem, że z jakiegoś powodu generowany plik ma wartość domyślną „Brak” podczas wywoływania szablonu.

Kevin R.
źródło
2

Dodaj następujące elementy do Web.config (w katalogu głównym). Wypróbowałem absolutnie wszystko z wcześniejszych sugestii i nic nie działało, dopóki nie znalazłem poniższych. Mam nadzieję, że pozwoli to zaoszczędzić czas komuś innemu.

Używam targetFramework = "4.6.1", ale jeśli jest inna, zmień go na używaną wersję.

<system.web>
   <compilation debug="true" targetFramework="4.6.1" />
   <httpRuntime targetFramework="4.6.1" />
</system.web>
Njål Eide
źródło
2

Dodaj ręcznie plik System.Core.dll do folderu bin. Uruchom ponownie VS i skompiluj projekt . Rozwiązany za mnie

Wystąpiły błędy projektowe we wszystkich widokach pomocników @Html i moich siatek Kendo.

Dodanie zestawu System.Core w Web.config nie przyniosło żadnego skutku, ani obniżenia wersji MVC. I błąd podczas próby ręcznego dodania referencji do System.Core:

Nie można dodać odniesienia do „System.Core”. System kompilacji już automatycznie odwołuje się do tego komponentu.

Upewnij się, że sprawdzasz, czy TargetFramework we właściwościach projektu jest zgodny z tym w projekcie web.config.

Zrzut ekranu folderu bin

pkucas
źródło
1

U mnie w menu projektu była opcja „Włącz C # 6.0 / VB 14”. Wybranie tej opcji załatwiło sprawę. Wcześniej próbowałem zmodyfikować plik web.config, zrestartować Visual Studio itp., Jak sugerowano w tym poście.

Aggromonster
źródło
1

Miałem ten sam problem. Zasadniczo problem polega na używaniu innej wersji System.Web.Mvc. Więc najlepszą rzeczą, którą powinieneś otworzyć Tools > Nuget Package Manager > Manage Nuget Packages for Solution. Prawdopodobnie widać System.Web.Mvcna Cosolidatekarcie. Upgrade lub downgrade to najlepsza opcja. Jeśli używasz najnowszego frameworka .Net, który jest obecnie .Net 4.6.1, powinieneś zaktualizować wszystkie System.Web.Mvcwersje do 5.2.4.0. Powodzenia!

Mehmet Taha Meral
źródło
Miałem 12 pakietów, które musiały zostać zaktualizowane, a sln działał bez żadnych problemów po zaktualizowaniu wszystkiego. Dziękuję Ci.
Jamie
1

Cóż, naprawiłem to, poprawiając odwołanie do zestawu w /Views/web.config , zobacz obrazek:

wprowadź opis obrazu tutaj

Altaf
źródło
1

usuń katalog bin, .vs i obj. po skompilowaniu projektu w Visual Studio.

Nisanur
źródło
Często przełączam się między wersjami mojego projektu, kilka z nich jest przeznaczonych dla różnych frameworków. To rozwiązało problem błędu odwołania „System.Core”. Dzięki za proste przypomnienie, że czasami konieczne jest czyszczenie środowiska VS między kolejnymi kasami.
Suncat2000
0

Stało się tak z jednym z moich poglądów - wszystkie inne były w porządku. Zrobiłem co następuje:

  • Utwórz nowy widok
  • Skopiuj i wklej zawartość ze starego widoku do nowego
  • Usunięto stary
  • Zmieniono nazwę nowego na stary
Liam
źródło
0

Ponowne uruchomienie Visual Studio zadziałało dla mnie.

Mangesh Kadam
źródło
Zdarzyło mi się to po pozornie niewinnych aktualizacjach NuGet. To były tylko biblioteki takie jak jQuery i bootstrap. Po aktualizacjach otrzymałem ten komunikat o błędzie i ponowne uruchomienie Visual Studio naprawiło go.
Steve Hiner
0
  • Zamknij plik
  • Wyczyść roztwór
  • Zbuduj rozwiązanie
  • Otwórz ponownie plik
Jeph
źródło
0

Spróbuj dodać

using system.Linq.Expressions;

user1223339
źródło
4
Chociaż ten fragment kodu może rozwiązać problem, dołączenie wyjaśnienia naprawdę pomaga poprawić jakość Twojego posta. Pamiętaj, że odpowiadasz na pytanie do czytelników w przyszłości, a osoby te mogą nie znać powodów, dla których zaproponowałeś kod.
Farkie,
0

Ja też miałem ten problem. Zmiana targetFramework="4.5.2"na targetFramwork="4.5" w pliku web.config rozwiązała to.

maryam b
źródło
0

Jeśli dostaniesz to tylko w jednym lub dwóch plikach CSHTML ... to jest uszkodzony plik.

Zdarzyło mi się to z uszkodzonym plikiem, który zawiera ukryte znaki Unicode. Spróbuj skopiować cały tekst dokumentu do nowej instancji notatnika. Wyczyść zawartość oryginalnego pliku i zapisz ... jeśli długość pliku jest> 0, coś jest nie tak.

Usuń plik i zapisz wystąpienie notatnika w starej wersji. Wszystkie błędy zniknęły za mnie.

W moim rozwiązaniu zdarzyło się to kilka razy. Nie jestem pewien, co to powoduje, ale podejrzewam, że to Resharper spieprzy, gdy zaczyna połykać ogromne kawałki pamięci w otchłań.

Czy jestem jedyną osobą, która łączy miłość / nienawiść z Resharper?

user910531
źródło
0

Może to być spowodowane wieloma projektami w rozwiązaniu, które nie są przeznaczone dla tej samej wersji programu .NET Framework. Na przykład jeśli projekt aplikacji sieci Web jest przeznaczony dla platformy .NET 4.5 i masz odwołanie do zestawu do innego projektu w rozwiązaniu, które jest przeznaczone dla platformy .NET 4.5.2. Aby to naprawić, musisz zmienić swoje projekty tak, aby wszystkie były przeznaczone dla tej samej wersji systemu .NET Framework.

Chris Pietschmann
źródło
0

Jeśli żadna z odpowiedzi nie działa, użyj tej. Miałem ten sam problem! W rzeczywistości plik configuration.cs w folderze migracji zaginął / został usunięty. Usunąłem folder migracji, a także usunąłem tabelę migracji z bazy danych. Następnie w konsoli Menedżera pakietów (PM) użyto następujących poleceń:

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

Ten proces odtworzył plik configuration.cs i wszystko działało idealnie!

Shah Aadil
źródło
0

Sprawdź właściwości projektu, aby uzyskać platformę docelową. Rozwiązałem ten problem w moim projekcie, dopasowując do mojej platformy docelowej .NET framework 4.6.1 MVC 5.2.3 był rozwiązaniem apt. Mam tę wersję MVC z NuGet.

Sukesh Mullassery
źródło
0

W moim przypadku rozwiązaniem było przeniesienie ConnectionString wewnątrz Web.Config. Ta instrukcja powinna znajdować się po sekcji AppSettings.

Rogerio Picilli
źródło
0

Zrobiłem WSZYSTKO z powyższego i ostatecznie odkryłem, że tym, co rozwiązuje to dla mnie (w witrynie .NET Framework 4.7.1 z MVC 5.2.4), było dodanie tego do głównego pliku web.config w <compilation>-

<assemblies>
  <add assembly="System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" />
</assemblies>
Andy
źródło