2015-08-11 15 views
71

Wir bewerten derzeit das neue Visual Studio 2015 und stieß auf ein seltsames Problem mit Intellisense. Als ich unsere Hauptlösung mit dem neuen Studio kompiliert habe, ist der Build erfolgreich, aber trotzdem werden 6 Fehler angezeigt.Visual Studio 2015: Intellisense-Fehler, aber Lösung kompiliert

Ich entdeckte, dass es kein echter Fehler ist, sondern nur ein Intellisense-Fehler. Der Code ist definitiv korrekt und alles wurde erfolgreich kompiliert. Der Code ist jedoch rot markiert und es erscheinen Fehler in der Fehlerliste.

Alle 6 Fehler haben den gleichen Ursprung. Es ist ein einfacher Konstruktoraufruf. Seltsam genug, aber es gibt auch einige Vorkommen des exakt gleichen Konstruktors ohne irgendwelche Fehler.

Die Fehlermeldung:

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> 

Das neue Studio auf einem neu installierten Windows 7 ohne Legacy-Software (kein VS13) installiert wurde.

Ich habe schon versucht, die Caches zu löschen, löschte die SUO-Datei, gelöscht bin und Obj Verzeichnisse, gereinigt und neu aufgebaut die Lösung usw. Aber nichts hat funktioniert.

Kann mir jemand dieses Verhalten erklären?

+2

Der von Intellisense verwendete Parser ist nicht derselbe wie der Compiler, mit dem der Code tatsächlich kompiliert wird. – chill

+1

Das passiert auch bei VS 2013. Es könnte sein, dass VS noch nicht die gesamte Codebasis indexiert hat. Wenn es kompiliert und wie erwartet funktioniert, werde ich es nicht beachten. –

+2

@chill In VS2015 sollte es der gleiche Parser sein, Teil von Roslyn. –

Antwort

29

Auch hatte dieses Problem mit einem migrierten Projekt, so referenzierte ich die Microsoft.CSharp dll. In einigen Projekten musste ich die Referenz im Projekt entfernen und hinzufügen.

+2

Ich musste dies tun, als ein Teammitglied der Lösung ein neues Projekt hinzufügte und einige cs-Dateien migrierte ein bestehendes Projekt zum neuen. Als ich spät kam, sah ich viele Fehler, aber ich konnte kompilieren und laufen. Das Löschen und erneute Hinzufügen des Verweises auf das neue Projekt aus dem beleidigten Projekt funktionierte für mich. – Bill

+0

Genau die gleiche Situation, die Bill beschrieben hat, passierte uns. Einige Klassen wurden in ein neues Projekt verschoben. Offenbar hat Visual Studio seinen Intellisense-Cache nicht aktualisiert, als ein neuer Projektverweis aus dem Quellcode-Steuerelement importiert wurde. Erneutes Eingeben der Referenz zwang VS manuell dazu. –

+1

Die Lösung kompiliert, zeigt aber in einigen Dateien verzerrte Fehler. Es wurden keine Fehler in "Release" angezeigt, nur in Debug. Microsoft.CSharp entfernt, und die Fehler sind weg, danke! – Michael

6

Auch hatte dieses Problem (der Titel, nicht die spezifische Fehlermeldung), sowie squiggly Zeilen im Editor. Die erste Squiggly-Zeile befindet sich unter der ersten #include-Anweisung, die einen vorkompilierten Header bezeichnet. Intellisense schließt den vorkompilierten Header nicht ein, führt diesen jedoch nicht als Fehler auf; Stattdessen listet es Fehler weiter unten in der Datei auf, die (sehr zu Recht) auf Deklarationen im vorkompilierten Header basieren.

Der Grund, dass Intellisense den vorkompilierten Header in meiner Umgebung nicht findet, ist, dass der angegebene Header keine tatsächliche Datei ist. Es muss nicht in einer anderen VC- oder gcc-Version sein, die ich verwendet habe, noch im Compiler von 2015, solange die vorkompilierten Header-Einstellungen korrekt konfiguriert sind. Anscheinend nicht mehr für Intellisense. Ich bin mir nicht ganz sicher, ob es 2013 anders war, vielleicht habe ich es einfach nie bemerkt. Im unwahrscheinlichen Fall, dass dies das hier gemeldete Problem wäre, ist die Lösung einfach: Erstellen Sie eine kleine Datei mit dem Vornamen des vorkompilierten Headers, wie in den Anweisungen #include angegeben, und lassen Sie diese Datei den tatsächlichen Namen enthalten des vorkompilierten Headers.

Wenn Sie sich fragen ... warum diese Unterscheidung zwischen dem vorkompilierten Header-Namen in der '# include' Anweisung und dem tatsächlichen Dateinamen des vorkompilierten Headers? Gerade weil es garantiert, dass vorkompilierte Header-Einstellungen korrekt konfiguriert sind. Überall dort, wo ein vorkompilierter Header "#included" ist, kann keine Datei enthalten sein. Entweder wird eine tatsächlich vorkompilierte (binäre) Version des aktuellen Headers gelesen oder die Kompilierung schlägt fehl. Offensichtlich ist ein Nachteil, dass es Menschen verwirrt den Code lesen, nicht nur Intellisense.

114

Ich hatte Tausende von IntelliSense-Fehlern und 0 Build-Fehler. Nach dem Löschen der .su-Datei ist ein Neustart von VS intellisense-Fehlern nicht mehr möglich.

Suo-Datei befindet sich relativ zu Quelle in: .vs \ Solution \ v14.suo

Kommentar nach: Beachten Sie, dass *.suo ist eine versteckte Datei.

Edit: Nach Kommentaren, VS2017 das gleiche Problem hat, so dass Sie ähnliche Lösung verwenden können: Löschen .vs \ Solution \ v15.suo

+5

Nur eine Anmerkung: '* .suo' Dateien können in einigen Fällen versteckt sein. Sie müssen also die Option "Versteckte Dateien anzeigen" im Windows Explorer aktivieren. – Athafoud

+4

Das Töten des .suo hatte keine Auswirkungen für mich, aber das Löschen des Bins und des Obj-Verzeichnisses und das anschließende Wiederherstellen der Lösung taten es. – Holger

+3

Dies sollte die richtige Antwort sein –

0

Heute habe ich ähnliches Problem mit MSVC habe ++ 2015 gab ich fast up und entschied sich, ohne IDE-Hinweise weiterzumachen, aber gelegentlich habe ich bemerkt, dass stdafx.h des Teilprojekts, mit dem ich Probleme hatte, keine Standard-Bibliotheks-Header enthält. Ich schlug vor, dass es die Modulkompilierung verlangsamen könnte, aber die Einbeziehung der Standard-Header dort behoben Intellisense auch.

6

In ähnliches Problem in Visual Studio 2017 ASP.Net Core-Projekt. Folgende Schritte haben den Trick für mich

  1. durch Ausführen eines saubere Lösung
  2. Schließen VS
  3. .suo Datei & löschen ist/obj Verzeichnisse löschen
  4. VS wieder öffnen
+1

Dies funktioniert aber so eine langweilige Sache, um Zeit zu Zeit zu tun. Ich habe immer dieses Problem, wenn ich im Freigabemodus baue. Seltsames VS kann es nicht von selbst herausfinden. – nawfal

0

Ich hatte mehr stdfax.h in Zusätzliche Include-Verzeichnisse Stellen Sie sicher, dass die von Ihnen gewünschte stdafx.h zuerst in Ihrem Pfad ist.

2

Ähnliches Problem wie andere, aber unterschiedliche Auflösung. Für den Fall, dass ich jemand anderem helfen kann.

Ausführen von Visual Studio 2017 15.5.2. Ich benutze Git und wechsle häufig Zweige. Vor einigen Wochen fing ich an, Editoren zu haben, die mir Fehler zeigten (alle bezogen auf Typen, die nicht gefunden werden konnten, obwohl Referenzen gültig waren). Compile hat super funktioniert. Ich habe das gleiche Thema in VS 2017 15.6 Preview (6. Januar 2018) bestätigt. Ich würde versuchen, Cache-, SUO-Dateien oder bin/obj-Ordner und keine Auswirkungen zu löschen. Zuerst scheint es zu funktionieren. Öffnen Sie Visual Studio und alles würde gut aussehen. Verwenden Sie "Lösung neu erstellen", und die IntelliSense-Fehler werden zurückgegeben. Ich habe sogar versucht, Visual Studio zu deinstallieren/neu zu installieren.

Ich hatte das gleiche Problem auf zwei Rechnern, beide mit der gleichen Version von Visual Studio.

Wenn man sich die Fehler über fehlende Typen anschaut, scheinen alle aus zwei referenzierten Projekten zu stammen. Eine dieser Referenzen war ein gemeinsames Projekt, das von fast jedem anderen Projekt in der Lösung verwendet wurde, aber eines davon war ein kleines Projekt ohne viele Referenzen. Zufälligerweise wurde das kleine Projekt auch von meinem größeren gemeinsamen Projekt referenziert. In Visual Studio habe ich das kleine Projekt entladen und neu geladen. Die Fehler gingen weg! Sie sind nicht auf Rebuild Solution zurückgekommen.

Ich wechselte dann Git Zweige und die Fehler kamen alle zurück. Glücklicherweise wiederholte ich die obigen Schritte des Entladens/Neuladens des kleinen Projekts und die Fehler verschwanden.

Jedes Mal, wenn ich die Git-Verzweigungen umschalte, kommen die Fehler zurück, bis ich diesen Vorgang wiederhole. Es gibt keine Änderungen zwischen den Git-Verzweigungen für das kleinere Projekt, das ich entlade/neu lade. Unklar, warum diese Sequenz mein Problem behebt.