Visual Studio 2015 o 2017 mostra gli errori di IntelliSense ma la soluzione viene compilata


122

Attualmente stiamo valutando il nuovo Visual Studio 2015 e abbiamo riscontrato uno strano problema con IntelliSense. Quando ho compilato la nostra soluzione principale con il nuovo studio, la build è riuscita, ma vengono comunque mostrati 6 errori.

Ho scoperto che non è un vero errore, ma solo un errore intellettuale. Il codice è decisamente corretto e tutto è stato compilato con successo. Il codice tuttavia è contrassegnato in rosso e gli errori vengono visualizzati nell'elenco degli errori.

Tutti e 6 gli errori hanno la stessa origine. È una semplice chiamata al costruttore. Abbastanza strano, ma ci sono anche alcune occorrenze dello stesso identico costruttore senza errori.

Il messaggio di errore:

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>

Il nuovo studio è stato installato su un Windows 7 appena installato senza alcun software legacy (no VS13).

Ho già provato a svuotare le cache, cancellato il file suo, cancellato bin e obj directory, pulito e ricostruito la soluzione ecc. Ma non ha funzionato nulla.

Qualcuno può spiegarmi quel comportamento?


2
Il parser utilizzato da intellisense non è lo stesso del compilatore utilizzato per compilare effettivamente il codice.
freddo l'

1
Questo accade anche su VS 2013. Potrebbe essere che VS non abbia ancora terminato l'indicizzazione dell'intera base di codice. Se si compila e funziona come previsto, non ci presterò attenzione.
Codice diverso

2
@chill In VS2015 dovrebbe essere lo stesso parser, parte di Roslyn.
Lasse V. Karlsen,

1
Riesci a creare un piccolo progetto che riproduca il problema? In tal caso, puoi inserire il codice?
Lasse V. Karlsen,

La classe è parziale o una parte di essa viene generata in fase di compilazione?
Panagiotis Kanavos

Risposte:


58

Ho anche avuto questo problema con un progetto migrato, quindi ho fatto riferimento alla dll Microsoft.CSharp. In alcuni progetti avevo bisogno di rimuovere e aggiungere nuovamente il Riferimento nel progetto.


3
Ho dovuto farlo quando un membro del team ha aggiunto un nuovo progetto alla soluzione e ha migrato alcuni file cs da un progetto esistente a quello nuovo. Quando ho ricevuto l'ultima volta, ho visto molti errori ma ho potuto compilare ed eseguire. Eliminare e riaggiungere il riferimento al nuovo progetto dal progetto offeso ha funzionato per me.
Bill

1
A noi è successa esattamente la stessa situazione descritta da Bill. Alcune classi sono state spostate in un nuovo progetto. Sembra che Visual Studio non abbia aggiornato la sua cache Intellisense quando il nuovo riferimento al progetto è stato importato dal controllo del codice sorgente. Il reinserimento manuale del riferimento ha costretto VS a farlo.
Peter Macej

2
La soluzione viene compilata, ma mostra errori ondulati in alcuni file. Nessun errore se mostrato in "Release", solo in Debug. Microsoft.CSharp rimosso e gli errori sono spariti, grazie!
Michael

@ Michael Grazie per quel suggerimento. Ho esattamente lo stesso problema. Nessun errore nel rilascio ma molti errori nel debug.
user2061057

Se la classe menzionata è il tuo codice, puoi semplicemente escludere e includere il file che contiene la classe. Dovrebbe attivare VS per aggiornare IntelliSense. #awfulbug
David S.

198

Ho avuto migliaia di errori intellisense e 0 errori di build. Dopo l'eliminazione.suo file e il riavvio, gli errori di VS intellisense scompaiono.

Suo il file si trova relativamente alla fonte in: .vs\SolutionName\v14\.suo

Secondo il commento: attenzione *.suo è un file nascosto.

Modifica: secondo i commenti, VS2017 ha lo stesso problema, quindi puoi utilizzare una soluzione simile: Elimina.vs\SolutionName\v15\.suo


7
Solo una nota: i *.suofile possono essere nascosti in alcuni casi. Quindi è necessario abilitare l' View Hidden filesopzione da Windows Explorer.
Athafoud

6
L'uccisione del .suo non ha avuto alcun effetto per me, ma l'eliminazione della directory bin e obj e quindi la ricostruzione della soluzione ha funzionato.
Holger Böhnke

L'eliminazione del file .suo non ha risolto il problema per me (in VS2015) Sto ottenendo il rosso spurio ondulato in javascript che fa riferimento alle proprietà dal code-behind: <%=Foo%>dicendo che la variabile non è dichiarata, ma tutto funziona in runtime.
Tim

Non sono sicuro al 100%, ma questo potrebbe anche aver corretto errori di markup non validi che stavo ottenendo con XAML
Geordie

trova . -name "* suo" -exec rm -rf {} \;
Derek Greer

20

Si è verificato un problema simile in Visual Studio 2017 ASP.Net Core Project. I passaggi seguenti hanno fatto il trucco per me

  1. Eseguire una soluzione pulita
  2. Chiudi VS
  3. Elimina il file .suo ed elimina le directory bin / obj
  4. Riapri VS

1
Funziona ma è una cosa così noiosa da fare di volta in volta. Ho sempre questo problema quando costruisco in modalità di rilascio. Strano VS non riesce a capirlo da solo.
nawfal

12

Problema simile ad altri, ma risoluzione diversa. Pubblicazione nel caso in cui posso aiutare qualcun altro.

Esecuzione di Visual Studio 2017 15.5.2. Uso Git e spesso cambio branch. Diverse settimane fa, ho iniziato a farmi visualizzare dagli editor gli errori (tutti relativi a tipi che non riusciva a trovare anche se i riferimenti erano validi). La compilazione ha funzionato alla grande. Ho confermato lo stesso problema in VS 2017 15.6 Preview (6 gennaio 2018). Proverei a eliminare la cache, i file SUO o le cartelle bin / obj e nessun impatto. All'inizio sembrerebbe funzionare. Riapri Visual Studio e tutto sembrerà a posto. Utilizzare "Rebuild Solution" e gli errori di IntelliSense verranno restituiti. Ho anche provato a disinstallare / reinstallare Visual Studio.

Ho avuto lo stesso problema su due macchine, entrambe con la stessa versione di Visual Studio.

Osservando gli errori sui tipi mancanti, sembravano tutti provenire da due progetti referenziati. Uno di questi riferimenti era un progetto condiviso utilizzato da quasi tutti gli altri progetti nella soluzione, ma uno di questi era un piccolo progetto senza molti riferimenti. Accade così che il piccolo progetto sia stato referenziato anche dal mio progetto condiviso più grande. In Visual Studio, ho scaricato il piccolo progetto e l'ho ricaricato. Gli errori sono andati via! Gli errori non sono tornati su Rebuild Solution.

Ho quindi cambiato i rami Git e gli errori sono tornati tutti. Fortunatamente ho ripetuto i passaggi precedenti di scaricare / ricaricare il piccolo progetto e gli errori sono andati via.

Ogni volta che cambio branch Git, gli errori si ripresentano finché non ripeto il processo. Non ci sono cambiamenti tra i rami Git per il progetto più piccolo che scarico / ricarico. Non è chiaro il motivo per cui quella sequenza sta risolvendo il mio problema.


Sulla base di ciò, ho scaricato tre progetti correlati "Test" o "Architettura", quindi ho scaricato e ricaricato il progetto Intellisense con errori (WPF). 0 di 0 errori :) +1 per i discreti dettagli che mi hanno portato a provare qualcosa di simile a te HgCoder!
Steven_BDawg

Utilizzo di VS 2017 15.9.9. Utilizzando Git. Utilizzando R #. Inoltre cambio regolarmente ramo. I miei errori sono infatti tutti IntelliSense. Ho notato che lo scaricamento del progetto fa sì che la colonna "Progetto" (nella scheda Elenco errori) vada in <Sconosciuto>. Quindi, sembra che la stia dando un po 'di calci. Lo scarico dei progetti sembra aver funzionato anche per me. Una soluzione pulita + soluzione di ricostruzione alla fine ha prodotto 0 errori.
dthal

7

Aveva anche questo problema (il titolo, non il messaggio di errore specifico), così come le linee ondulate nell'editor. La prima riga ondulata è sotto la prima #includeistruzione, che nomina un'intestazione precompilata. Intellisense non riesce a includere l'intestazione precompilata, ma non lo elenca come errore; invece elenca gli errori più in basso nel file, su codice che (molto giustamente) si basa su dichiarazioni nell'intestazione precompilata.

Il motivo per cui Intellisense non trova l'intestazione precompilata nel mio ambiente è che l'intestazione denominata non è un file effettivo. Non deve essere in nessun'altra versione VC o gcc che ho usato, né nel compilatore 2015, a condizione che le impostazioni dell'intestazione precompilata siano configurate correttamente. Apparentemente non più per Intellisense. Non sono del tutto sicuro che fosse diverso nel 2013, forse non me ne sono mai accorto.

Nell'improbabile caso che questo sia il problema qui riportato, la soluzione è semplice: creare un piccolo file con il finto nome dell'intestazione precompilata, come specificato in #include direttive, e lasciare che quel file includa il nome effettivo dell'intestazione precompilata.

Se ti chiedi ... perché questa distinzione tra il nome dell'intestazione precompilata nell'istruzione '#include' e il nome file effettivo dell'intestazione precompilata? Proprio perché garantisce che le impostazioni dell'intestazione precompilata siano configurate correttamente. Ogni volta che un'intestazione precompilata è "#included", non ci sono file intorno che potrebbero essere inclusi. Viene letta una versione effettivamente precompilata (binaria) dell'intestazione effettiva o la compilazione non riesce. Ovviamente, uno svantaggio è che confonde le persone che leggono il codice, non solo Intellisense.


2

Visual Studio 2017 Ho cancellato il file ".suo" dalla posizione .vs \ SolutionName \ v15.suo E poi ho riavviato Visual Studio. Questo ha funzionato per me.


2

Oggi ho avuto un problema simile con MSVC ++ 2015. Ho quasi rinunciato e ho deciso di andare avanti senza suggerimenti IDE, ma improvvisamente ho notato che stdafx.h del progetto con cui ho avuto problemi non contiene intestazioni di libreria standard. Ho ipotizzato che l'inclusione di tutte le intestazioni standard utilizzate nel progetto in stdafx.h potrebbe aumentare la velocità di compilazione, tuttavia così facendo sono stati corretti anche gli errori di Intellisense.


1

Avevo più stdfax.hdirectory di inclusione aggiuntive. Assicurati che ciò che stdafx.hintendi sia il primo nel tuo percorso.


1

Ho avuto un problema simile con diverse versioni di Visual Studio.

L'eliminazione della cartella .suo o .vs non è stata di aiuto per me.

La soluzione per me era che avevo l'estensione StopOnFirstBuildError attiva. Dopo aver disattivato "Interrompi compilazione al primo errore" nel menu di compilazione e dopo la creazione completa della soluzione, gli errori visualizzati da Intellisense sono scomparsi.


1

Vedevo gli errori di intellisearch solo durante la pubblicazione di un sito web. (Sito ASP / C #, VS 2017). Hanno rotto la pubblicazione. Il sito funzionava bene a livello locale.

Eliminati gli errori deselezionando l'impostazione per la precompilazione e pubblicato correttamente. Pubblica -> Impostazioni -> Opzioni di pubblicazione file -> Precompila durante la pubblicazione


1

In Visual Studio 2019 il problema riguarda la modifica dei rami con Git quando sono presenti pacchetti NuGet installati nel progetto. Cosa ho fatto per risolvere questo problema:

  1. Soluzione pulita
  2. Chiudi Visual Studio
  3. Elimina la cartella dei pacchetti
  4. Apri Visual Studio
  5. Vai a Gestione pacchetti
  6. Ripristina tutti i pacchetti
  7. Riconversione
  8. Se roslyn è mancante, chiudi e apri Visual Studio, quindi ricompila.
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.