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.