Visual Studio 2015 oder 2017 zeigt IntelliSense-Fehler an, aber die Lösung wird kompiliert

122

Wir evaluieren derzeit das neue Visual Studio 2015 und haben ein seltsames Problem mit IntelliSense festgestellt. Als ich unsere Hauptlösung mit dem neuen Studio kompilierte, war der Build erfolgreich, aber es werden trotzdem 6 Fehler angezeigt.

Ich habe festgestellt, dass es sich nicht um einen echten Fehler handelt, sondern nur um einen Intellisense-Fehler. Der Code ist definitiv korrekt und alles erfolgreich kompiliert. Der Code ist jedoch rot markiert und Fehler werden in der Fehlerliste angezeigt.

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 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 wurde auf einem frisch installierten Windows 7 ohne Legacy-Software (kein VS13) installiert.

Ich habe bereits versucht, die Caches zu löschen, die suo-Datei zu löschen, die bin- und obj-Verzeichnisse zu löschen, die Lösung zu bereinigen und neu zu erstellen usw. Aber nichts hat funktioniert.

Kann mir jemand dieses Verhalten erklären?

Asche
quelle
2
Der von Intellisense verwendete Parser ist nicht derselbe wie der Compiler, mit dem der Code tatsächlich kompiliert wird.
Chill
1
Dies geschieht auch bei VS 2013. Es kann sein, dass VS die Indizierung der gesamten Codebasis noch nicht abgeschlossen hat. Wenn es kompiliert wird und wie erwartet funktioniert, werde ich es nicht beachten.
Code anders
2
@chill In VS2015 sollte es der gleiche Parser sein, Teil von Roslyn.
Lasse V. Karlsen
1
Können Sie ein kleines Projekt erstellen, das das Problem reproduziert? Wenn ja, können Sie den Code posten?
Lasse V. Karlsen
Ist die Klasse teilweise oder wird ein Teil davon zur Kompilierungszeit generiert?
Panagiotis Kanavos

Antworten:

58

Hatte auch dieses Problem mit einem migrierten Projekt, so dass ich auf die Microsoft.CSharp-DLL verwies. In einigen Projekten musste ich die Referenz im Projekt entfernen und erneut hinzufügen.

Guilherme de Jesus Santos
quelle
3
Ich musste dies tun, als ein Teammitglied der Lösung ein neues Projekt hinzufügte und einige CS-Dateien von einem vorhandenen Projekt auf das neue migrierte. Als ich das Neueste bekam, sah ich viele Fehler, aber ich konnte kompilieren und ausführen. Das Löschen und erneute Hinzufügen des Verweises auf das neue Projekt aus dem beleidigten Projekt hat für mich funktioniert.
Bill
1
Genau die gleiche Situation, die Bill beschrieben hat, ist uns passiert. Einige Klassen wurden in ein neues Projekt verschoben. Anscheinend hat Visual Studio den Intellisense-Cache nicht aktualisiert, als eine neue Projektreferenz aus der Quellcodeverwaltung importiert wurde. Die manuelle erneute Eingabe der Referenz zwang VS dazu.
Peter Macej
2
Die Lösung wird kompiliert, zeigt jedoch in einigen Dateien fehlerhafte Fehler. In "Release" wurden keine Fehler angezeigt, nur in Debug. Microsoft.CSharp wurde entfernt und die Fehler sind verschwunden, danke!
Michael
@ Michael Danke für diesen Tipp. Ich habe genau das gleiche Problem. Keine Fehler in Release, aber viele Fehler in Debug.
user2061057
Wenn es sich bei der genannten Klasse um Ihren eigenen Code handelt, können Sie die Datei, die die Klasse enthält, einfach ausschließen und dann einschließen. Es sollte VS auslösen, um IntelliSense zu aktualisieren. #awfulbug
David S.
198

Ich hatte Tausende von Intellisense-Fehlern und 0 Build-Fehler. Nach dem Löschen der .suoDatei und dem Neustart von VS Intellisense sind Fehler verschwunden.

Suo Datei befindet sich relativ zur Quelle in: .vs\SolutionName\v14\.suo

Laut Kommentar: Vorsicht, das *.suoist eine versteckte Datei.

Bearbeiten: Laut Kommentaren hat VS2017 das gleiche Problem, sodass Sie eine ähnliche Lösung verwenden können: Löschen.vs\SolutionName\v15\.suo

Karel Kral
quelle
7
Nur ein Hinweis: *.suoIn einigen Fällen können Dateien ausgeblendet sein. Sie müssen also die View Hidden filesOption im Windows Explorer aktivieren .
Athafoud
6
Das Töten der .suo hatte für mich keine Auswirkung, aber das Löschen des Bin und des Objekts und das anschließende Neuerstellen der Lösung haben es geschafft.
Holger Böhnke
Das Löschen der .suo-Datei hat das Problem für mich nicht gelöst (in VS2015). Ich erhalte das falsche rote Schnörkel in Javascript, das auf Eigenschaften von Code-Behind verweist: <%=Foo%>Die Variable wird nicht deklariert, aber alles funktioniert zur Laufzeit.
Tim
Ich bin nicht 100% sicher, aber dies könnte auch ungültige Markup-Fehler behoben haben, die ich mit XAML
Geordie
finden . -name "* suo" -exec rm -rf {} \;
Derek Greer
20

In Visual Studio 2017 ASP.Net Core Project ist ein ähnliches Problem aufgetreten. Die folgenden Schritte haben den Trick für mich getan

  1. Führen Sie eine saubere Lösung durch
  2. Schließen Sie VS
  3. Löschen Sie die .suo-Datei und löschen Sie die bin / obj-Verzeichnisse
  4. Öffnen Sie VS erneut
Naren
quelle
1
Dies funktioniert, ist aber von Zeit zu Zeit so mühsam. Ich habe immer dieses Problem, wenn ich im Release-Modus baue. Seltsame VS kann es nicht selbst herausfinden.
Nawfal
12

Ähnliches Problem wie andere, aber unterschiedliche Auflösung. Posting 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 die Zweige. Vor einigen Wochen wurde mir von den Redakteuren Fehler angezeigt (alle bezogen auf Typen, die nicht gefunden werden konnten, obwohl Referenzen gültig waren). Kompilieren hat super funktioniert. Ich habe das gleiche Problem in VS 2017 15.6 Preview (6. Januar 2018) bestätigt. Ich würde versuchen, Cache, SUO-Dateien oder bin / obj-Ordner zu löschen und keine Auswirkungen. Auf den ersten Blick scheint es zu funktionieren. Öffnen Sie Visual Studio erneut und alles würde gut aussehen. Verwenden Sie "Rebuild Solution" 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 Computern, beide mit derselben Version von Visual Studio.

Bei Betrachtung der Fehler bezüglich fehlender Typen schienen sie alle aus zwei Projekten zu stammen, auf die verwiesen wurde. Eine dieser Referenzen war ein gemeinsames Projekt, das von nahezu jedem anderen Projekt in der Lösung verwendet wurde, aber eine davon war ein kleines Projekt ohne viele Referenzen. Es ist einfach so, dass das kleine Projekt auch von meinem größeren gemeinsamen Projekt referenziert wurde. In Visual Studio habe ich das kleine Projekt entladen und neu geladen. Die Fehler gingen weg! Diese Fehler sind bei Rebuild Solution nicht aufgetreten.

Ich habe dann die Git-Zweige gewechselt und die Fehler sind alle zurückgekommen. Glücklicherweise wiederholte ich die obigen Schritte zum Entladen / Neuladen des kleinen Projekts und die Fehler verschwanden.

Jedes Mal, wenn ich die Git-Zweige wechsle, treten die Fehler wieder auf, bis ich diesen Vorgang wiederhole. Es gibt keine Änderungen zwischen den Git-Zweigen für das kleinere Projekt, das ich entlade / neu lade. Unklar, warum diese Sequenz mein Problem behebt.

HgCoder
quelle
Auf dieser Grundlage habe ich drei "Test" - oder "Architektur" -bezogene Projekte entladen, dann das fehlerhafte Intellisense-Projekt (WPF) entladen und neu geladen. 0 von 0 Fehlern :) +1 für die diskreten Details, die mich dazu gebracht haben, etwas Ähnliches wie Sie zu versuchen HgCoder!
Steven_BDawg
Verwenden von VS 2017 15.9.9. Mit Git. Mit R #. Ich wechsle auch regelmäßig die Filialen. Meine Fehler sind in der Tat alle IntelliSense. Ich stelle fest, dass das Entladen des Projekts dazu führt, dass die Spalte "Projekt" (auf der Registerkarte Fehlerliste) zu <Unbekannt> wechselt. Es scheint also ein bisschen zu treten. Das Entladen von Projekten scheint auch für mich funktioniert zu haben. Eine Clean Solution + Rebuild Solution ergab schließlich 0 Fehler.
14.
7

Hatte auch dieses Problem (der Titel, nicht die spezifische Fehlermeldung), sowie verschnörkelte Linien im Editor. Die erste schnörkellose Zeile befindet sich unter der ersten #includeAnweisung, die einen vorkompilierten Header benennt. Intellisense enthält den vorkompilierten Header nicht, listet ihn jedoch nicht als Fehler auf. Stattdessen werden Fehler weiter unten in der Datei aufgelistet, und zwar auf Code, der (zu Recht) auf Deklarationen im vorkompilierten Header beruht.

Der Grund, warum Intellisense den vorkompilierten Header in meiner Umgebung nicht findet, ist, dass der genannte Header keine tatsächliche Datei ist. Es muss weder in einer anderen von mir verwendeten VC- oder gcc-Version noch im Compiler 2015 enthalten sein, 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.

In dem unwahrscheinlichen Fall, dass dies das hier gemeldete Problem ist, ist die Lösung einfach: Erstellen Sie eine kleine Datei mit dem Vorwandnamen des vorkompilierten Headers, wie in den #includeAnweisungen angegeben, und lassen Sie diese Datei den tatsächlichen Namen des vorkompilierten Headers enthalten.

Wenn Sie sich fragen ... warum diese Unterscheidung zwischen dem vorkompilierten Headernamen in der Anweisung '#include' und dem tatsächlichen Dateinamen des vorkompilierten Headers? Gerade weil es garantiert, dass vorkompilierte Header-Einstellungen korrekt konfiguriert sind. Wo immer ein vorkompilierter Header "#included" ist, gibt es keine Datei, die eingeschlossen werden könnte. Entweder wird eine tatsächlich vorkompilierte (binäre) Version des eigentlichen Headers gelesen oder die Kompilierung schlägt fehl. Ein Nachteil ist natürlich, dass es die Leute verwirrt , die den Code lesen, nicht nur Intellisense.

Stein
quelle
2

Visual Studio 2017 Ich habe die Datei ".suo" vom Speicherort .vs \ SolutionName \ v15.suo gelöscht und dann Visual Studio neu gestartet. Das hat bei mir funktioniert.

Saurabh Raoot
quelle
2

Heute hatte ich ein ähnliches Problem mit MSVC ++ 2015. Ich gab fast auf und beschloss, ohne IDE-Hinweise fortzufahren, aber plötzlich bemerkte ich, dass stdafx.h des Projekts, mit dem ich Probleme hatte, keine Standardbibliotheksheader enthält. Ich habe spekuliert, dass die Aufnahme aller im Projekt verwendeten Standard-Header in stdafx.h die Kompilierungsgeschwindigkeit erhöhen könnte, dies hat jedoch auch Intellisense-Fehler behoben.

Kleine Bedrohung
quelle
1

Ich hatte mehrere stdfax.hin zusätzlichen Include-Verzeichnissen. Stellen Sie sicher, dass das, was stdafx.hSie beabsichtigt haben, zuerst auf Ihrem Weg ist.


quelle
1

Ich hatte ein ähnliches Problem mit verschiedenen Visual Studio-Versionen.

Das Löschen des Ordners .suo oder .vs hat mir nicht geholfen.

Die Lösung für mich war, dass ich die Erweiterung StopOnFirstBuildError aktiv hatte. Nach dem Deaktivieren von "Stop Build on First Error" im Build-Menü und nachdem die Lösung vollständig erstellt wurde, wurden die von Intellisense angezeigten Fehler behoben.

Fabian
quelle
1

Ich habe die Intellisearch-Fehler nur beim Veröffentlichen einer Website gesehen. (ASP / C # -Site, VS 2017). Sie haben die Veröffentlichung abgebrochen. Die Site lief lokal gut.

Beheben Sie die Fehler, indem Sie die Einstellung zum Vorkompilieren deaktivieren, und es wurde einwandfrei veröffentlicht. Veröffentlichen -> Einstellungen -> Optionen zum Veröffentlichen von Dateien -> Vorkompilieren während der Veröffentlichung

Rahn
quelle
1

In Visual Studio 2019 besteht das Problem darin, Zweige mit Git zu ändern, wenn NuGet-Pakete im Projekt installiert sind. Was ich getan habe, um das zu lösen:

  1. Saubere Lösung
  2. Schließen Sie Visual Studio
  3. Löschen Sie den Paketordner
  4. Öffnen Sie Visual Studio
  5. Gehen Sie zum Paket-Manager
  6. Stellen Sie alle Pakete wieder her
  7. Neu kompilieren
  8. Wenn Roslyn fehlt, schließen und öffnen Sie Visual Studio und kompilieren Sie es erneut.
Daniel Lobo
quelle