Pytanie Visual Studio 2015: błędy IntelliSense, ale rozwiązanie kompiluje


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

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

Wszystkie 6 błędów ma to samo pochodzenie. To proste połączenie z konstruktorem. Dziwne, ale są też pewne wystąpienia 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 Windows 7 bez żadnego starszego oprogramowania (bez VS13).

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

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


76
2017-08-11 13:49


pochodzenie


Analizator składni używany przez program intellisense to nie to samo, co kompilator użyty do kompilacji kodu. - chill
Tak dzieje się również w VS 2013. Możliwe, że VS nie zakończył jeszcze indeksowania całej podstawy kodu. Jeśli będzie kompilować i działać zgodnie z oczekiwaniami, nie będę zwracał na to uwagi. - Code Different
@chill W VS2015 powinien to być ten sam parser, część Roslyn. - Lasse Vågsæther Karlsen
Czy możesz stworzyć mały projekt, który powiela problem? Jeśli tak, czy możesz napisać kod? - Lasse Vågsæther Karlsen
Czy klasa jest częściowa, czy jest jej częścią generowaną podczas kompilacji? - Panagiotis Kanavos


Odpowiedzi:


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


35
2017-09-15 12:40



Musiałem to zrobić, gdy członek zespołu dodał nowy projekt do rozwiązania i zmigrował niektóre pliki CS z istniejącego projektu na nowy. Kiedy dostałem najnowsze, widziałem wiele błędów, ale mogłem skompilować i uruchomić. Upuściłem i ponownie dodałem odniesienie do nowego projektu z obrażonego projektu. - Bill
Dokładnie taka sama sytuacja, którą opisał nam Bill. Niektóre klasy zostały przeniesione do nowego projektu. Wygląda na to, że Visual Studio nie zaktualizowało pamięci podręcznej Intellisense, gdy odniesienie do nowego projektu zostało zaimportowane ze sterowania źródłowego. Ponowne wprowadzenie referencji ręcznie wymusiło VS, aby to zrobić. - Peter Macej
Rozwiązanie kompiluje, ale pokazuje skąpe błędy w niektórych plikach. Brak błędów w miejscu pokazanym w "Release", tylko w Debugowaniu. Usunięto Microsoft.CSharp, a błędy zniknęły, dziękuję! - 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 wymieniona klasa jest twoim własnym kodem, możesz po prostu wykluczyć, a następnie dołączyć plik zawierający klasę. Powinno to spowodować, że VS zaktualizuje IntelliSense. #awfulbug - davidshen84


Miałem tysiące błędów od intellisense i 0 błędów kompilacji. Po usunięciu pliku .suo, ponowne uruchamianie błędów intellisense VS zniknęło.

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

Zgodnie z komentarzem: Strzeż się, że * .suo jest ukrytym plikiem.

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


129
2017-11-02 12:30



Tylko uwaga: *.suo pliki mogą być ukryte w niektórych przypadkach. Musisz włączyć View Hidden files opcja z Eksploratora Windows. - Athafoud
Zabicie .suo nie miało dla mnie żadnego skutku, ale usunięto bin bin i obj dir, a następnie przebudowałem rozwiązanie. - Holger Böhnke
To powinna być właściwa odpowiedź - Mr_LinDowsMac
Usunięcie pliku .suo nie rozwiązało problemu dla mnie (w VS2015) Otrzymuję fałszywe czerwone falowanie w javascript, które odwołuje się do właściwości z kodu z tyłu: <%=Foo%> mówiąc, że zmienna nie jest zadeklarowana, ale wszystko działa w środowisku wykonawczym. - Tim
Nie jestem w 100% pewny, ale może to również naprawić nieprawidłowe błędy znaczników, które otrzymywałem z XAML - Geordie


Wystąpił podobny problem w Visual Studio 2017 ASP.Net Core Project. Poniższe kroki zrobiły dla mnie sztuczkę

  1. Wykonaj Clean Solution
  2. Zamknij VS
  3. Usuń plik .suo i usuń katalogi bin / obj
  4. Ponownie otwórz VS

8
2018-04-01 21:24



To działa, ale od czasu do czasu robię takie nudne rzeczy. Zawsze mam ten problem podczas budowania w trybie zwolnienia. Dziwny VS nie może sam tego stwierdzić. - nawfal


Miał również ten problem (tytuł, nie konkretny komunikat o błędzie), a także faliste linie w edytorze. Pierwsza krzywa linia jest pod pierwszym #include instrukcja, która nazywa prekompilowany nagłówek. Intellisense nie włącza prekompilowanego nagłówka, ale nie podaje go jako błąd; zamiast tego wyświetla błędy w dalszej części pliku, na 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 to być żadna inna używana wersja VC lub gcc, ani też kompilator 2015, o ile prekompilowane ustawienia nagłówka są poprawnie skonfigurowane. Najwyraźniej już nie dla Intellisense. Nie jestem całkiem pewien, czy było inaczej w 2013 roku, może po prostu nigdy tego nie zauważyłem.

W mało prawdopodobnym przypadku, w którym problem zostałby zgłoszony tutaj, rozwiązanie jest proste: utwórz mały plik o nazwie pretend-prekompilowanego nagłówka, jak określono w #include dyrektywy i niech ten plik zawiera rzeczywistą nazwę prekompilowanego nagłówka.

Jeśli zastanawiasz się ... dlaczego to rozróżnienie między prekompilowaną nazwą nagłówka w instrukcji "#include" a rzeczywistą nazwą nagłówka prekompilowanego? Właśnie dlatego, że gwarantuje to, że prekompilowane ustawienia nagłówka są poprawnie skonfigurowane. Wszędzie tam, gdzie prekompilowany nagłówek jest "#included", nie ma wokół tego pliku, który mógłby zostać zawarty. Naprawiana jest faktycznie skompilowana (binarna) wersja rzeczywistego nagłówka lub kompilacja kończy się niepowodzeniem. Oczywiście wadą jest to, że myli ludzie czytanie kodu, a nie tylko IntelliSense.


6
2017-09-15 20:55





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

Uruchamianie Visual Studio 2017 15.5.2. Używam Git i często przełączam gałęzie. Kilka tygodni temu zacząłem od tego, że redaktorzy pokazali mi błędy (wszystkie związane z typami, których nie udało się znaleźć, mimo że referencje były prawidłowe). Kompilacja działała świetnie. Potwierdziłem ten sam problem w VS 2017 15.6 Preview (6 stycznia 2018). Próbowałbym usunąć foldery pamięci podręcznej, pliki SUO lub bin / obj bez wpływu. Na początku wydaje się działać. Reopen Visual Studio i wszystko będzie dobrze wyglądać. Użyj "Odbuduj rozwiązanie", a błędy IntelliSense powrócą. Próbowałem nawet odinstalować / ponownie zainstalować program Visual Studio.

Miałem ten sam problem na dwóch komputerach, zarówno w tej samej wersji programu Visual Studio.

Patrząc na błędy dotyczące brakujących typów, wszystkie wydawały się pochodzić z dwóch przywoływanych projektów. Jednym z tych odniesień był wspólny projekt używany przez prawie każdy inny projekt w rozwiązaniu, ale jednym z nich był mały projekt bez wielu referencji. Tak się składa, że ​​do małego projektu odwoływał się również mój większy wspólny projekt. W Visual Studio rozładowałem mały projekt i ponownie go załadowałem. Błędy zniknęły! Błędy nie powróciły w przypadku Rebuild Solution.

Potem przełączyłem gałęzie Git i wszystkie błędy wróciły. Na szczęście powtórzyłem powyższe kroki rozładunku / ponownego załadowania małego projektu i błędy zniknęły.

Za każdym razem, gdy przełączam gałęzie Git, błędy wracają, dopóki nie powtórzę tego procesu. Między oddziałami Git są zerowe zmiany dla mniejszego projektu, który rozładowuję / przeładowuję. Niejasne, dlaczego ta sekwencja rozwiązuje mój problem.


5
2018-01-06 17:39





Dziś mam podobny problem z MSVC ++ 2015. Prawie zrezygnowałem i postanowiłem kontynuować bez wskazówek IDE, ale od czasu do czasu zauważyłem, że stdafx.h podprojektu, z którym miałem problemy, nie zawiera żadnych standardowych nagłówków biblioteki. Zasugerowałem, że może to spowolnić kompilację modułów, ale dołączenie standardowych nagłówków również naprawiło IntelliSense.


0
2018-01-22 19:40





Miałem wiele stdfax.h w dodatkowych katalogach. Upewnij się, że stdafx.h zamierzałeś po raz pierwszy na swojej drodze.


0
2018-05-30 14:56