Program Visual Studio 2015 lub 2017 wyświetla błędy IntelliSense, ale rozwiązanie jest kompilowane

122

Obecnie oceniamy nowy program Visual Studio 2015 i napotkaliśmy dziwny problem z technologią IntelliSense. Kiedy skompilowałem nasze główne rozwiązanie z nowym studiem, kompilacja się powiodła, ale mimo to pokazano 6 błędów.

Odkryłem, że to nie jest prawdziwy błąd, a tylko błąd inteligencji. Kod jest zdecydowanie poprawny i wszystko zostało pomyślnie skompilowane. Kod jest jednak oznaczony na czerwono, a na liście błędów pojawiają się błędy.

Wszystkie 6 błędów ma to samo źródło. To proste wywołanie konstruktora. Dość dziwne, ale jest też kilka wystąpień dokładnie tego samego konstruktora bez żadnych błędów.

Komunikat o błędzie:

Code: CS1729
Message: '<the class>' does not contain a constructor that takes that many arguments.
Project: <the project name>
File: <the path to the file>

Nowe studio zostało zainstalowane na świeżo zainstalowanym systemie Windows 7 bez żadnego starszego oprogramowania (bez VS13).

Próbowałem już wyczyścić pamięci podręczne, skasowałem plik suo, skasowałem katalogi bin i obj, wyczyściłem i odbudowałem rozwiązanie itp. Ale nic nie działało.

Czy ktoś może mi wyjaśnić to zachowanie?

Popiół
źródło
2
Parser używany przez Intellisense to nie to samo, co kompilator użyty do rzeczywistej kompilacji kodu.
wyluzuj
1
Dzieje się tak również w VS 2013. Możliwe, że VS nie zakończył jeszcze indeksowania całej bazy kodu. Jeśli kompiluje się i działa zgodnie z oczekiwaniami, nie będę na to zwracać uwagi.
Code Different
2
@chill W VS2015 powinien to być ten sam parser, część Roslyn.
Lasse V. Karlsen,
1
Czy możesz stworzyć mały projekt, który odtwarza problem? Jeśli tak, czy możesz wysłać kod?
Lasse V. Karlsen,
Czy klasa jest częściowa, czy jakakolwiek jej część jest generowana w czasie kompilacji?
Panagiotis Kanavos

Odpowiedzi:

58

Miałem również ten problem z migrowanym projektem, więc odwołałem się do biblioteki dll Microsoft.CSharp. W niektórych projektach musiałem usunąć i ponownie dodać odniesienie w projekcie.

Guilherme de Jesus Santos
źródło
3
Musiałem to zrobić, gdy członek zespołu dodał nowy projekt do rozwiązania i przeprowadził migrację niektórych plików cs z istniejącego projektu do nowego. Kiedy otrzymałem najnowszą wersję, zauważyłem wiele błędów, ale mogłem skompilować i uruchomić. Pominięcie i ponowne dodanie odniesienia do nowego projektu z obrażonego projektu zadziałało.
Bill
1
Dokładnie ta sama sytuacja, którą opisał Bill, przytrafiła się nam. Niektóre klasy zostały przeniesione do nowego projektu. Wygląda na to, że program Visual Studio nie zaktualizował swojej pamięci podręcznej Intellisense, gdy nowe odwołanie do projektu zostało zaimportowane z kontroli źródła. Ponowne wprowadzenie referencji ręcznie zmusiło VS do zrobienia tego.
Peter Macej
2
Rozwiązanie kompiluje się, ale w niektórych plikach wyświetla faliste błędy. Żadnych błędów nie pokazano w „Wydaniu”, tylko w Debugowaniu. Usunięto Microsoft.CSharp, a błędy zniknęły, dzięki!
Michael
@Michael Dzięki za tę wskazówkę. Mam dokładnie ten sam problem. Brak błędów w wydaniu, ale wiele błędów w debugowaniu.
user2061057
Jeśli wspomniana klasa jest Twoim własnym kodem, możesz po prostu wykluczyć, a następnie dołączyć plik, który zawiera tę klasę. Powinien wyzwolić VS, aby zaktualizować IntelliSense. #awfulbug
David S.
198

Miałem tysiące błędów IntelliSense i 0 błędów kompilacji. Po usunięciu .suopliku i ponownym uruchomieniu VS intellisense zniknęły.

Suo plik znajduje się w stosunku do źródła w: .vs\SolutionName\v14\.suo

Według komentarza: Uważaj, *.suoto jest ukryty plik.

Edycja: Według komentarzy, VS2017 ma ten sam problem, więc możesz użyć podobnego rozwiązania: Usuń.vs\SolutionName\v15\.suo

Karel Kral
źródło
7
Uwaga: *.suow niektórych przypadkach pliki mogą być ukryte. Musisz więc włączyć tę View Hidden filesopcję w eksploratorze Windows.
Athafoud
6
Zabicie pliku .suo nie przyniosło mi żadnego efektu, ale usunięcie bin i obj dir, a następnie odbudowanie rozwiązania.
Holger Böhnke,
Usunięcie pliku .suo nie rozwiązało problemu dla mnie (w VS2015) Otrzymuję fałszywy czerwony falista w javascript, który odwołuje się do właściwości zza kodu: <%=Foo%>mówi, że zmienna nie jest zadeklarowana, ale wszystko działa w czasie wykonywania.
Tim
Nie jestem w 100% pewien, ale mogło to również naprawić nieprawidłowe błędy znaczników, które otrzymywałem z XAML
Geordie
odnaleźć . -name "* suo" -exec rm -rf {} \;
Derek Greer
20

Wystąpił podobny problem w programie Visual Studio 2017 ASP.Net Core Project. Poniższe kroki załatwiły sprawę

  1. Wykonaj czyste rozwiązanie
  2. Zamknij VS
  3. Usuń plik .suo i katalogi bin / obj
  4. Otwórz ponownie VS
Naren
źródło
1
To działa, ale od czasu do czasu taka żmudna rzecz. Zawsze mam ten problem podczas budowania w trybie wydania. Dziwny VS nie może sam tego rozgryźć.
nawfal
12

Podobny problem jak inne, ale inna rozdzielczość. Wysyłanie na wypadek, gdybym mógł komuś pomóc.

Uruchamianie programu Visual Studio 2017 15.5.2. Używam Gita i często zmieniam gałęzie. Kilka tygodni temu zacząłem, gdy redaktorzy pokazali mi błędy (wszystkie związane z typami, których nie mógł znaleźć, mimo że odniesienia były prawidłowe). Kompilacja działała świetnie. Potwierdziłem ten sam problem w VS 2017 15.6 Preview (6 stycznia 2018). Spróbowałbym usunąć pamięć podręczną, pliki SUO lub foldery bin / obj i bez wpływu. Na początku wydawało się, że działa. Otwórz ponownie Visual Studio i wszystko będzie dobrze wyglądać. Użyj opcji „Odbuduj rozwiązanie”, a zostaną zwrócone błędy IntelliSense. Próbowałem nawet odinstalować / ponownie zainstalować Visual Studio.

Miałem ten sam problem na dwóch komputerach, na obu z tą samą wersją programu Visual Studio.

Patrząc na błędy dotyczące brakujących typów, okazało się, że wszystkie one pochodzą z dwóch projektów, do których istnieją odniesienia. Jednym z tych odniesień był projekt współdzielony, używany przez prawie każdy inny projekt w rozwiązaniu, ale jeden z nich był małym projektem bez wielu odniesień. Tak się składa, że ​​do małego projektu odwoływał się także mój większy wspólny projekt. W Visual Studio wyładowałem mały projekt i załadowałem go ponownie. Błędy zniknęły! Te błędy nie wróciły w Rebuild Solution.

Następnie zmieniłem gałęzie Gita i wszystkie błędy wróciły. Na szczęście powtórzyłem powyższe kroki rozładunku / przeładowania małego projektu i błędy zniknęły.

Za każdym razem, gdy zmieniam gałęzie Git, błędy wracają, dopóki nie powtórzę tego procesu. Nie ma żadnych zmian między gałęziami Git dla mniejszego projektu, który wyładowuję / przeładowuję. Nie jest jasne, dlaczego ta sekwencja rozwiązuje mój problem.

HgCoder
źródło
Na tej podstawie wyładowałem trzy projekty związane z „Testem” lub „Architekturą”, a następnie wyładowałem i ponownie załadowałem projekt Intellisense wypełniony błędami (WPF). 0 z 0 błędów :) +1 za dyskretne szczegóły, które skłoniły mnie do wypróbowania czegoś podobnego do Ciebie HgCoder!
Steven_BDawg
Korzystanie z VS 2017 15.9.9. Korzystanie z Git. Używając R #. Regularnie też zmieniam gałęzie. Moje błędy to rzeczywiście wszystkie IntelliSense. Zauważyłem, że wyładowanie projektu powoduje, że kolumna „Projekt” (na karcie Lista błędów) przechodzi do <Unknown>. Wygląda więc na to, że trochę go kopie. Wygląda na to, że rozładowywanie projektów również zadziałało. Rozwiązanie Clean Solution + Rebuild Solution ostatecznie zwróciło 0 błędów.
dthal
7

Miałem również ten problem (tytuł, a nie konkretny komunikat o błędzie), a także faliste linie w edytorze. Pierwsza falista linia znajduje się pod pierwszą #includeinstrukcją, która nazywa prekompilowany nagłówek. Intellisense nie uwzględnia prekompilowanego nagłówka, ale nie wyświetla tego jako błędu; zamiast tego wyświetla listę błędów w dalszej części pliku, w kodzie, który (bardzo słusznie) opiera się na deklaracjach w prekompilowanym nagłówku.

Powodem, dla którego Intellisense nie znajduje prekompilowanego nagłówka w moim środowisku, jest to, że nazwany nagłówek nie jest rzeczywistym plikiem. Nie musi być w żadnej innej wersji VC lub gcc, z której korzystałem, ani w kompilatorze 2015, o ile wstępnie skompilowane ustawienia nagłówka są poprawnie skonfigurowane. Najwyraźniej już nie dla Intellisense. Nie jestem do końca pewien, czy w 2013 roku było inaczej, może po prostu nigdy tego nie zauważyłem.

W mało prawdopodobnym przypadku, gdyby był to zgłoszony tutaj problem, rozwiązanie jest proste: utwórz mały plik z udawaną nazwą prekompilowanego nagłówka, jak określono w #include dyrektywach, i pozwól temu plikowi zawierać rzeczywistą nazwę prekompilowanego nagłówka.

Jeśli zastanawiasz się ... dlaczego ta różnica między prekompilowaną nazwą nagłówka w instrukcji „#include” a rzeczywistą nazwą pliku prekompilowanego nagłówka? Właśnie dlatego, że gwarantuje, że prekompilowane ustawienia nagłówka są poprawnie skonfigurowane. Wszędzie tam, gdzie prekompilowany nagłówek jest „#included”, nie ma w pobliżu pliku, który można by dołączyć. Odczytywana jest albo faktycznie prekompilowana (binarna) wersja aktualnego nagłówka, albo kompilacja kończy się niepowodzeniem. Oczywiście wadą jest to, że dezorientuje ludzi czytających kod, a nie tylko Intellisense.

Stein
źródło
2

Visual Studio 2017 Usunąłem plik „.suo” z lokalizacji .vs \ SolutionName \ v15.suo, a następnie ponownie uruchomiłem program Visual Studio. To zadziałało dla mnie.

Saurabh Raoot
źródło
2

Dzisiaj miałem podobny problem z MSVC ++ 2015. Prawie zrezygnowałem i postanowiłem iść dalej bez podpowiedzi IDE, ale nagle zauważyłem, że stdafx.h projektu, z którym miałem problemy, nie zawiera żadnych standardowych nagłówków bibliotek. Spekulowałem, że włączenie wszystkich standardowych nagłówków używanych w projekcie do stdafx.h może przyspieszyć szybkość kompilacji, jednak naprawiło to również błędy Intellisense.

Niewielkie zagrożenie
źródło
1

Miałem wiele stdfax.hw Dodatkowych katalogach dołączania. Upewnij się, że to, stdafx.hco zamierzałeś, jest pierwsze na twojej ścieżce.


źródło
1

Miałem podobny problem z różnymi wersjami Visual Studio.

Usunięcie folderu .suo lub .vs nie pomogło mi.

Rozwiązaniem dla mnie było to, że miałem aktywne rozszerzenie StopOnFirstBuildError. Po wyłączeniu opcji „Zatrzymaj kompilację przy pierwszym błędzie” w menu kompilacji i po pełnym zbudowaniu rozwiązania błędy wyświetlane przez Intellisense zniknęły.

fabiański
źródło
1

Widziałem błędy Intellisearch tylko podczas publikowania strony internetowej. (Witryna ASP / C #, VS 2017). Zerwali publikację. Witryna działała poprawnie lokalnie.

Usunięto błędy, odznaczając ustawienie prekompilacji i opublikowano poprawnie. Publikuj -> Ustawienia -> Opcje publikowania pliku -> Prekompiluj podczas publikowania

Rahn
źródło
1

W programie Visual Studio 2019 problem polega na zmianie gałęzi za pomocą Git, gdy w projekcie są zainstalowane pakiety NuGet. Co zrobiłem, aby to rozwiązać:

  1. Czyste rozwiązanie
  2. Zamknij program Visual Studio
  3. Usuń folder z pakietami
  4. Otwórz program Visual Studio
  5. Przejdź do Menedżera pakietów
  6. Przywróć wszystkie pakiety
  7. Przekompiluj
  8. Jeśli brakuje Roslyn, zamknij i otwórz program Visual Studio, a następnie skompiluj ponownie.
Daniel Lobo
źródło