Visual Studio 2015 ou 2017 affiche des erreurs IntelliSense mais la solution se compile

122

Nous évaluons actuellement le nouveau Visual Studio 2015 et avons rencontré un problème étrange avec IntelliSense. Lorsque j'ai compilé notre solution principale avec le nouveau studio, la construction réussit, mais 6 erreurs sont néanmoins affichées.

J'ai découvert que ce n'est pas une vraie erreur, mais seulement une erreur intellisense. Le code est définitivement correct et tout est compilé avec succès. Le code est cependant marqué en rouge et les erreurs apparaissent dans la liste des erreurs.

Les 6 erreurs ont la même origine. C'est un simple appel de constructeur. Assez étrange, mais il y a aussi des occurrences du même constructeur exact sans aucune erreur.

Le message d'erreur:

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>

Le nouveau studio a été installé sur un Windows 7 fraîchement installé sans aucun logiciel hérité (pas de VS13).

J'ai déjà essayé de vider les caches, supprimé le fichier suo, supprimé les répertoires bin et obj, nettoyé et reconstruit la solution, etc. Mais rien n'a fonctionné.

Quelqu'un peut-il m'expliquer ce comportement?

Cendre
la source
2
L'analyseur utilisé par intellisense n'est pas le même que le compilateur utilisé pour compiler réellement le code.
détendre
1
Cela se produit également sur VS 2013. Il se peut que VS n'ait pas encore fini d'indexer toute la base de code. S'il se compile et fonctionne comme prévu, je n'y prêterai aucune attention.
Code différent du
2
@chill Dans VS2015, il devrait s'agir du même analyseur, faisant partie de Roslyn.
Lasse V. Karlsen
1
Pouvez-vous créer un petit projet qui reproduit le problème? Si oui, pouvez-vous publier le code?
Lasse V. Karlsen
La classe est-elle partielle ou une partie de celle-ci est-elle générée au moment de la compilation?
Panagiotis Kanavos

Réponses:

58

J'ai également eu ce problème avec un projet migré, j'ai donc référencé la DLL Microsoft.CSharp. Dans certains projets, je devais supprimer et ajouter à nouveau la référence dans le projet.

Guilherme de Jesus Santos
la source
3
J'ai dû le faire lorsqu'un membre de l'équipe a ajouté un nouveau projet à la solution et a migré certains fichiers cs d'un projet existant vers le nouveau. Quand j'ai eu la dernière version, j'ai vu de nombreuses erreurs mais je pouvais compiler et exécuter. Supprimer et rajouter la référence au nouveau projet du projet offensé a fonctionné pour moi.
Bill
1
Exactement la même situation décrite par Bill nous est arrivée. Certaines classes ont été déplacées vers un nouveau projet. Il semble que Visual Studio n'ait pas mis à jour son cache Intellisense lorsque la nouvelle référence de projet a été importée à partir du contrôle de source. La réintroduction manuelle de la référence a forcé VS à le faire.
Peter Macej le
2
La solution se compile, mais affiche des erreurs ondulées dans certains fichiers. Aucune erreur où indiqué dans "Release", juste dans Debug. Suppression de Microsoft.CSharp et les erreurs ont disparu, merci!
Michael
@Michael Merci pour cette astuce. J'ai exactement le même problème. Pas d'erreurs dans Release mais beaucoup d'erreurs dans Debug.
user2061057
Si la classe mentionnée est votre propre code, vous pouvez simplement exclure puis inclure le fichier qui contient la classe. Cela devrait déclencher VS pour mettre à jour IntelliSense. #awfulbug
David S.
198

J'ai eu des milliers d'erreurs intellisense et 0 erreurs de construction. Après la suppression du .suofichier et le redémarrage de VS intellisense, les erreurs ont disparu.

Suo Le fichier est situé par rapport à la source dans: .vs\SolutionName\v14\.suo

Selon le commentaire: méfiez-vous qu'il *.suos'agit d'un fichier caché.

Edit: Selon les commentaires, VS2017 a le même problème, vous pouvez donc utiliser une solution similaire: Supprimer.vs\SolutionName\v15\.suo

Karel Kral
la source
7
Juste une note: les *.suofichiers peuvent être cachés dans certains cas. Vous devez donc activer l' View Hidden filesoption de l'explorateur Windows.
Athafoud
6
Tuer le .suo n'a eu aucun effet pour moi, mais la suppression du répertoire bin et obj, puis la reconstruction de la solution l'ont fait.
Holger Böhnke
La suppression du fichier .suo n'a pas résolu le problème pour moi (dans VS2015) J'obtiens le faux squiggly rouge en javascript qui fait référence aux propriétés de code-behind: en <%=Foo%>disant que la variable n'est pas déclarée, mais que tout fonctionne à l'exécution.
Tim
Je ne suis pas sûr à 100%, mais cela pourrait également avoir corrigé des erreurs de balisage non valides que j'obtenais avec XAML
Geordie
trouver . -nom "* suo" -exec rm -rf {} \;
Derek Greer
20

Ran dans un problème similaire dans Visual Studio 2017 ASP.Net Core Project. Les étapes suivantes ont fait l'affaire pour moi

  1. Effectuer une solution propre
  2. Fermer VS
  3. Supprimer le fichier .suo et supprimer les répertoires bin / obj
  4. Rouvrir VS
Naren
la source
1
Cela fonctionne mais une chose tellement fastidieuse à faire de temps en temps. J'ai toujours ce problème lors de la construction en mode release. Strange VS ne peut pas le comprendre par lui-même.
nawfal
12

Problème similaire aux autres, mais résolution différente. Poster au cas où je peux aider quelqu'un d'autre.

Exécution de Visual Studio 2017 15.5.2. J'utilise Git et change fréquemment de branche. Il y a plusieurs semaines, j'ai commencé à demander aux éditeurs de me montrer des erreurs (toutes liées à des types qu'il ne pouvait pas trouver même si les références étaient valides). La compilation a très bien fonctionné. J'ai confirmé le même problème dans VS 2017 15.6 Preview (6 janvier 2018). J'essaierais de supprimer le cache, les fichiers SUO ou les dossiers bin / obj et sans impact. Au début, cela semble fonctionner. Rouvrez Visual Studio et tout aurait l'air bien. Utilisez "Rebuild Solution" et les erreurs IntelliSense seraient renvoyées. J'ai même essayé de désinstaller / réinstaller Visual Studio.

J'ai eu le même problème sur deux machines, toutes deux avec la même version de Visual Studio.

En examinant les erreurs concernant les types manquants, elles semblaient toutes provenir de deux projets référencés. L'une de ces références était un projet partagé utilisé par à peu près tous les autres projets de la solution, mais l'un d'eux était un petit projet sans beaucoup de références. Il se trouve que le petit projet a également été référencé par mon plus grand projet partagé. Dans Visual Studio, j'ai déchargé le petit projet et l'ai rechargé. Les erreurs sont parties! Ces erreurs ne sont pas revenues sur Rebuild Solution.

J'ai ensuite changé de branche Git et les erreurs sont toutes revenues. Heureusement, j'ai répété les étapes ci-dessus de déchargement / rechargement du petit projet et les erreurs ont disparu.

Chaque fois que je change de branche Git, les erreurs reviennent jusqu'à ce que je répète ce processus. Il n'y a aucun changement entre les branches Git pour le plus petit projet que je décharge / recharge. Je ne sais pas pourquoi cette séquence résout mon problème.

HgCoder
la source
Sur cette base, j'ai déchargé trois projets liés «Test» ou «Architecture», puis déchargé et rechargé le projet Intellisense rempli d'erreurs (WPF). 0 sur 0 erreurs :) +1 pour les détails discrets qui m'ont amené à essayer quelque chose de similaire à vous HgCoder!
Steven_BDawg
Utilisation de VS 2017 15.9.9. Utilisation de Git. Utilisation de R #. Je change également régulièrement de branche. Mes erreurs sont en effet toutes IntelliSense. Je remarque que le déchargement du projet provoque le passage de la colonne "Projet" (dans l'onglet Liste des erreurs) à <Inconnu>. Donc, il semble y avoir un petit coup de pied. Le déchargement des projets semble aussi avoir fonctionné pour moi. Une solution propre + une solution de reconstruction a finalement généré 0 erreur.
dthal
7

Également eu ce problème (le titre, pas le message d'erreur spécifique), ainsi que des lignes ondulées dans l'éditeur. La première ligne ondulée se trouve sous la première #includeinstruction, qui nomme un en-tête précompilé. Intellisense ne parvient pas à inclure l'en-tête précompilé, mais ne le répertorie pas comme une erreur; au lieu de cela, il répertorie les erreurs plus loin dans le fichier, sur du code qui (à juste titre) s'appuie sur des déclarations dans l'en-tête précompilé.

La raison pour laquelle Intellisense ne trouve pas l'en-tête précompilé dans mon environnement est que l'en-tête nommé n'est pas un fichier réel. Il n'a pas besoin d'être dans une autre version de VC ou gcc que j'ai utilisée, ni dans le compilateur 2015, tant que les paramètres d'en-tête précompilés sont correctement configurés. Apparemment plus pour Intellisense. Je ne suis pas tout à fait sûr que ce soit différent en 2013, peut-être que je n'ai jamais remarqué.

Dans le cas improbable où ce serait le problème signalé ici, la solution est simple: créez un petit fichier avec le prétendu-nom de l'en-tête précompilé, comme spécifié dans les #includedirectives, et laissez ce fichier inclure le nom réel de l'en-tête précompilé.

Si vous vous demandez ... pourquoi cette distinction entre le nom d'en-tête précompilé dans l'instruction '#include' et le nom de fichier réel de l'en-tête précompilé? Précisément parce qu'il garantit que les paramètres d'en-tête précompilés sont correctement configurés. Partout où un en-tête précompilé est "#included", il n'y a aucun fichier autour qui pourrait être inclus. Soit une version réellement précompilée (binaire) de l'en-tête réel est lue, soit la compilation échoue. De toute évidence, un inconvénient est que cela déroute les gens qui lisent le code, pas seulement Intellisense.

Stein
la source
2

Visual Studio 2017 J'ai supprimé le fichier ".suo" de l'emplacement .vs \ SolutionName \ v15.suo Et puis redémarré Visual studio. Cela a fonctionné pour moi.

Saurabh Raoot
la source
2

Aujourd'hui, j'ai eu un problème similaire avec MSVC ++ 2015. J'ai presque abandonné et j'ai décidé de continuer sans conseils IDE, mais j'ai soudainement remarqué que stdafx.h du projet avec lequel j'ai eu des problèmes ne contient aucun en-tête de bibliothèque standard. J'ai émis l'hypothèse que l'inclusion de tous les en-têtes standard utilisés dans le projet dans stdafx.h pourrait augmenter la vitesse de compilation, mais cela a également corrigé les erreurs Intellisense.

Menace mineure
la source
1

J'en avais plusieurs stdfax.hdans les répertoires d'inclusion supplémentaires. Assurez-vous que ce que stdafx.hvous vouliez est le premier sur votre chemin.


la source
1

J'ai eu un problème similaire avec différentes versions de Visual Studio.

La suppression du dossier .suo ou .vs ne m'a pas aidé.

La solution pour moi était que l'extension StopOnFirstBuildError était active. Après avoir désactivé «Arrêter la génération à la première erreur» dans le menu de génération, et une fois la solution entièrement générée, les erreurs affichées par Intellisense ont disparu.

Fabien
la source
1

Je ne voyais les erreurs intellisearch que lors de la publication d'un site Web. (Site ASP / C #, VS 2017). Ils ont cassé la publication. Le site fonctionnait bien localement.

Effacé les erreurs en décochant le paramètre de précompilation, et il a publié très bien. Publier -> Paramètre -> Options de publication de fichier -> Précompiler lors de la publication

Rahn
la source
1

Dans Visual Studio 2019, le problème concerne la modification des branches avec Git lorsque des packages NuGet sont installés dans le projet. Ce que j'ai fait pour résoudre ceci:

  1. Solution propre
  2. Fermer Visual Studio
  3. Supprimer le dossier des packages
  4. Ouvrez Visual Studio
  5. Accédez au gestionnaire de packages
  6. Restaurer tous les packages
  7. Recompiler
  8. Si roslyn est manquant, fermez et ouvrez Visual Studio, puis recompilez.
Daniel Lobo
la source