Visual Studio 2015 або 2017 показує помилки IntelliSense, але компілює рішення


122

Наразі ми оцінюємо нову Visual Studio 2015 і зіткнулися з дивною проблемою з IntelliSense. Коли я склав наше основне рішення з новою студією, збірка вдається, але все ж показано 6 помилок.

Я виявив, що це не реальна помилка, а лише помилка інтелігенції. Код, безумовно, правильний, і все складено успішно. Однак код позначений червоним кольором, а помилки відображаються у списку помилок.

Усі 6 помилок мають однакове походження. Це простий виклик конструктора. Як не дивно, але є також деякі випадки того самого конструктора без помилок.

Повідомлення про помилку:

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>

Нова студія була встановлена ​​на щойно встановленому Windows 7 без будь-якого застарілого програмного забезпечення (без VS13).

Я вже намагався очистити кеш-пам'ять, видалив файл suo, видалив бін та obj каталоги, очистив та відновив рішення тощо. Але нічого не вийшло.

Хтось може мені пояснити таку поведінку?


2
Аналізатор, який використовується intellisense, не є тим самим, що компілятор, який використовується для компіляції коду.
холод

1
Це трапляється і на VS 2013. Можливо, VS ще не закінчив індексувати всю кодову базу. Якщо він збирається і працює так, як очікувалося, я не звертатиму на це ніякої уваги.
Код Різне

2
@chill У VS2015 це повинен бути той самий аналізатор, частина Росліна.
Лассе В. Карлсен

1
Чи можете ви створити невеликий проект, який відтворює проблему? Якщо так, чи можете ви опублікувати код?
Лассе В. Карлсен

Клас частковий, чи якась його частина формується під час компіляції?
Панайотис Канавос,

Відповіді:


58

Також була ця проблема з перенесеним проектом, тому я посилався на dll Microsoft.CSharp. У деяких проектах мені потрібно було видалити та додати ще раз Посилання в проект.


3
Мені довелося це зробити, коли член команди додав до рішення новий проект і перемістив деякі файли cs з існуючого проекту на новий. Коли я отримав останню інформацію, я побачив багато помилок, але міг компілювати та запускати. Скасування та повторне додавання посилання на новий проект із ображеного проекту працювало на мене.
Білл

1
Точно така ж ситуація, яку описав Білл, трапилася і з нами. Деякі класи були перенесені на новий проект. Схоже, Visual Studio не оновлював кеш-пам'ять Intellisense, коли нова імпортація проекту була імпортована з джерела управління. Повторне введення посилання вручну змусило VS зробити це.
Пітер Мацей

2
Рішення компілюється, але показує чіткі помилки в деяких файлах. Немає помилок, де показано у "Випуску", просто у налагодженні. Видалено Microsoft.CSharp, а помилок пропало, дякую!
Майкл

@Michael Дякую за цю пораду. У мене точно таке саме питання. Немає помилок у випуску, але багато помилок у налагодженні.
користувач2061057

Якщо згаданий клас - це ваш власний код, ви можете просто виключити, а потім включити файл, який містить клас. Це повинно запустити VS для оновлення IntelliSense. #awfulbug
David S.

198

У мене було тисячі помилок інтелігенції та 0 помилок побудови. Після видалення.suo файлу та перезапуску VS інтелігенції помилки не зникають.

Suo файл розташований відносно джерела у: .vs\SolutionName\v14\.suo

Відповідно до коментаря: остерігайтеся цього *.suo це прихований файл.

Редагувати: Відповідно до коментарів, VS2017 має ту саму проблему, тож ви можете використовувати подібне рішення: Видалити.vs\SolutionName\v15\.suo


7
Лише зауваження: *.suoфайли можуть бути заховані в деяких випадках. Тож вам потрібно включити View Hidden filesопцію від Windows Explorer.
Афафуд

6
Вбивство .suo не вплинуло на мене, але видалення біна та obj dir, а потім відновлення рішення зробили це.
Хольгер Бьонке

Видалення .suo-файлу не вирішило для мене проблеми (у VS2015), я отримую хибний червоний шкварок у JavaScript, який посилається на властивості з коду-позаду: <%=Foo%>мовляв, змінна не оголошується, але все працює під час виконання.
Тім

Я не впевнений на 100%, але це також могло виправити невірні помилки розмітки, які я отримував із XAML
Geordie

знайти. -name "* suo" -exec rm -rf {} \;
Дерек Грір

20

Потрапив у подібний випуск у Visual Studio 2017 ASP.Net Core Project. Наступні кроки зробили для мене трюк

  1. Виконайте чисте рішення
  2. Закрити VS
  3. Видалити .suo файл та видалити bin / obj каталоги
  4. Повторно відкрити VS

1
Це працює, але таку стомлюючу справу потрібно робити час від часу. У мене завжди виникає ця проблема при побудові в режимі випуску. Дивний VS не може зрозуміти це сам.
nawfal

12

Аналогічна проблема, як і інші, але різне вирішення. Проводка, якщо я можу допомогти комусь іншому.

Запуск Visual Studio 2017 15.5.2. Я використовую Git і часто перемикаю гілки. Кілька тижнів тому у мене почали редактори показувати мені помилки (усі пов'язані з типами, які він не міг знайти, навіть якщо посилання були дійсними). Compile чудово працював. Я підтвердив ту саму проблему в VS 2017 15.6 Preview (6 січня 2018 р.). Я б спробував видалити кеш, файли SUO або папки bin / obj, і це не вплине. Спочатку, здавалося б, працює. Відкрийте візуальну студію і все виглядало б добре. Використовуйте "Відновити рішення", і помилки IntelliSense повернуться. Я навіть спробував видалити / перевстановити Visual Studio.

У мене був той самий випуск на двох машинах, обидва з однаковою версією Visual Studio.

Переглядаючи помилки щодо відсутніх типів, вони, як видається, походять з двох посилаються проектів. Однією з таких посилань був спільний проект, який використовувався майже будь-яким іншим проектом у вирішенні, але одна з них була невеликим проектом без багатьох посилань. Так буває, що на малий проект також посилався мій більший спільний проект. У Visual Studio я вивантажив невеликий проект і перезавантажив його. Помилки пішли! Вони помилки не повернулися на Rebuild Solution.

Потім я переключив гілки Git і всі помилки повернулися. На щастя, я повторив вищезазначені кроки вивантаження / перезавантаження малого проекту, і помилки усунулися.

Кожен раз, коли я перемикаю гілки Git, помилки повертаються, поки я не повторюю цей процес. Між гілками Git є менші зміни для меншого проекту, який я вивантажую / завантажую. Незрозуміло, чому ця послідовність виправляє мою проблему.


Виходячи з цього, я вивантажив три пов'язані з проектом "Тест" або "Архітектуру", потім вивантажив і перезавантажив проект, заповнений помилками Intellisense (WPF). 0 з 0 помилок :) +1 для дискретних деталей, які змусили мене спробувати щось подібне до вас HgCoder!
Steven_BDawg

Використання VS 2017 15.9.9. Використання Git. Використання R #. Я також регулярно перемикаю гілки. Мої помилки справді всі IntelliSense. Я помічаю, що розвантаження проекту змушує стовпець "Проект" (на вкладці "Список помилок") перейти до <Невідомо>. Отже, це, здається, трохи його б'є. Здається, розвантажувальні проекти спрацювали і для мене. Чистий розчин + рішення відновити, нарешті, отримав 0 помилок.
dthal

7

Також була ця проблема (заголовок, а не конкретне повідомлення про помилку), а також чіткі лінії в редакторі. Перша криволінійна лінія знаходиться під першою#include твердженням, яке називає попередньо складений заголовок. Intellisense не може включити попередньо складений заголовок, але не відображає це як помилку; натомість він перелічує помилки далі у файлі, за кодом, який (дуже справедливо) покладається на декларації у попередньо складеному заголовку.

Причина, що Intellisense не знаходить попередньо складеного заголовка в моєму середовищі, полягає в тому, що названий заголовок не є фактичним файлом. Це не повинно бути в будь-якій іншій версії VC або gcc, яку я використовував, а також у компіляторі 2015 року, доки попередньо складені параметри заголовка правильно налаштовані. Мабуть, вже не для Intellisense. Я не зовсім впевнений, що в 2013 році було інакше, можливо, я просто ніколи не помічав.

У тому малоймовірному випадку, що це була б проблема, про яку тут повідомляється, рішення просте: створити невеликий файл із прізвищем попередньо складеного заголовка, як зазначено в #include директивах, і нехай цей файл містить фактичну назву заздалегідь складеного заголовка.

Якщо вам цікаво ... чому ця різниця між попередньо складеним назвою заголовка в операторі "#include" і фактичним іменем файлу попередньо складеного заголовка? Саме тому, що це гарантує правильність налаштування попередньо складених заголовків. Де б попередньо складений заголовок "#included", навколо нього не існує жодного файлу. Чи читається фактично попередньо складена (двійкова) версія фактичного заголовка, або компіляція не вдається. Очевидно, недоліком є ​​те, що він бентежить людей, які читають код, а не лише Intellisense.


2

Visual Studio 2017 Я видалив файл ".suo" з розташування .vs \ SolutionName \ v15.suo І потім перезапустив Visual studio. Це працювало для мене.


2

Сьогодні у мене були подібні проблеми з MSVC ++ 2015. Я майже відмовився і вирішив продовжувати без підказів IDE, але раптом я помітив, що stdafx.h проекту, у якого виникли проблеми, не містить стандартних заголовків бібліотеки. Я гадав, що включення всіх стандартних заголовків, що використовуються в проект, в stdafx.h може збільшити швидкість компіляції, однак, роблячи це, також виправлені помилки Intellisense.


1

У мене було кілька stdfax.hдодаткових каталогів включення. Переконайтесь, що stdafx.hнамічене спочатку на вашому шляху.


1

У мене була схожа проблема з різними версіями Visual Studio.

Видалення папки .suo чи .vs мені не допомогло.

Рішення для мене було в тому, що я активував розширення StopOnFirstBuildError. Після вимкнення "Зупинити побудову на першій помилці" в меню збірки та після того, як рішення було повністю побудоване, помилки, показані Intellisense, усунулися.


1

Я бачив помилки міжбіркового пошуку лише під час публікації веб-сайту. (ASP / C # сайт, VS 2017). Вони порушили публікацію. Місцевий сайт працює нормально.

Усунув помилки, знявши галочку перед попередньою компіляцією, і вона опублікувала штраф. Опублікувати -> Налаштування -> Опції публікації файлів -> Попередній компіляцію під час публікації


1

У Visual Studio 2019 проблема полягає у зміні гілок з Git, коли в проекті встановлені пакети NuGet. Що я зробив для вирішення цього питання:

  1. Чистий розчин
  2. Закрити Visual Studio
  3. Видаліть папку пакетів
  4. Відкрити візуальну студію
  5. Перейдіть до менеджера пакунків
  6. Відновити всі пакети
  7. Перекомпілюйте
  8. Якщо roslyn відсутній, закрийте і відкрийте Visual Studio, тоді перекомпілюйте.
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.