Visual Studio 2015 или 2017 показывает ошибки IntelliSense, но решение компилируется

122

В настоящее время мы оцениваем новую Visual Studio 2015 и столкнулись со странной проблемой с IntelliSense. Когда я скомпилировал наше основное решение с новой студией, сборка прошла успешно, но все же показано 6 ошибок.

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

Все 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, удалить каталоги bin и obj, очистить и перестроить решение и т. Д. Но ничего не сработало.

Может ли кто-нибудь объяснить мне такое поведение?

ясень
источник
2
Парсер, используемый intellisense, не совпадает с компилятором, используемым для фактической компиляции кода.
chill
1
Это происходит и в VS 2013. Возможно, VS еще не завершил индексирование всей кодовой базы. Если он компилируется и работает должным образом, я не буду обращать на это внимания.
Code Different
2
@chill В VS2015 это должен быть тот же парсер, входящий в состав Roslyn.
Лассе В. Карлсен
1
Можете ли вы создать небольшой проект, воспроизводящий проблему? Если да, можете ли вы опубликовать код?
Лассе В. Карлсен
Является ли класс частичным или какая-либо его часть создается во время компиляции?
Панайотис Канавос

Ответы:

58

Также была эта проблема с перенесенным проектом, поэтому я сослался на dll Microsoft.CSharp. В некоторых проектах мне нужно было удалить и снова добавить ссылку в проект.

Гильерме де Хесус Сантос
источник
3
Мне пришлось сделать это, когда член команды добавил в решение новый проект и перенес некоторые файлы cs из существующего проекта в новый. Когда я получил последнюю версию, я увидел много ошибок, но смог скомпилировать и запустить. У меня сработало удаление и повторное добавление ссылки на новый проект из обиженного проекта.
Bill
1
Точно такая же ситуация, которую описал Билл, произошла с нами. Некоторые классы были переведены в новый проект. Похоже, что Visual Studio не обновляла свой кеш Intellisense, когда новая ссылка на проект была импортирована из системы управления версиями. Повторный ввод ссылки вручную вынудил VS сделать это.
Питер Масей
2
Решение компилируется, но в некоторых файлах появляются волнистые ошибки. Никаких ошибок не было показано в «Release», только в Debug. Удален Microsoft.CSharp, и ошибки исчезли, спасибо!
Майкл
@Michael Спасибо за совет. У меня точно такая же проблема. Нет ошибок в Release, но много ошибок в Debug.
user2061057 09
Если упомянутый класс является вашим собственным кодом, вы можете просто исключить, а затем включить файл, содержащий класс. Он должен вызвать VS для обновления IntelliSense. #awfulbug
Дэвид С.
198

У меня были тысячи ошибок intellisense и 0 ошибок сборки. После удаления .suoфайла и перезапуска VS intellisense ошибки исчезли.

Suo файл расположен относительно источника в: .vs\SolutionName\v14\.suo

Согласно комментарию: Остерегайтесь, что *.suoэто скрытый файл.

Изменить: согласно комментариям, VS2017 имеет ту же проблему, поэтому вы можете использовать аналогичное решение: Удалить.vs\SolutionName\v15\.suo

Карел Крал
источник
7
Обратите внимание: *.suoв некоторых случаях файлы могут быть скрыты. Поэтому вам нужно включить эту View Hidden filesопцию в проводнике Windows.
Атафуд
6
Удаление .suo не повлияло на меня, но удаление bin и obj dir, а затем восстановление решения сделали это.
Holger Böhnke
Удаление файла .suo не решило для меня проблему (в VS2015). Я получаю ложные красные волнистые линии в javascript, которые ссылаются на свойства из кода программной части: <%=Foo%>говорят, что переменная не объявлена, но все работает во время выполнения.
Тим
Я не уверен на 100%, но это также могло исправить недопустимые ошибки разметки, которые я получал с XAML
Джорди
найти . -name "* suo" -exec rm -rf {} \;
Дерек Грир
20

Возникла аналогичная проблема в Visual Studio 2017 ASP.Net Core Project. Следующие шаги помогли мне

  1. Выполните чистое решение
  2. Закрыть VS
  3. Удалить файл .suo и удалить каталоги bin / obj
  4. Открыть VS
Naren
источник
1
Это работает, но время от времени делать это утомительно. У меня всегда эта проблема возникает при сборке в режиме релиза. Strange VS не может понять это сама.
nawfal
12

Проблема такая же, как и у других, но с другим разрешением. Размещение сообщения на случай, если я смогу помочь кому-то другому.

Запуск Visual Studio 2017 15.5.2. Я использую Git и часто переключаю ветки. Несколько недель назад я начал заставлять редакторов показывать мне ошибки (все связанные с типами, которые он не мог найти, хотя ссылки были действительными). Компиляция отлично работала. Я подтвердил ту же проблему в предварительной версии VS 2017 15.6 (6 января 2018 г.). Я бы попытался удалить кеш, файлы SUO или папки bin / obj и не повлиял. Сначала казалось, что это работает. Снова откройте Visual Studio, и все будет хорошо. Используйте «Rebuild Solution», и IntelliSense вернет ошибку. Я даже попытался удалить / переустановить Visual Studio.

У меня была такая же проблема на двух машинах с одинаковой версией Visual Studio.

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

Затем я переключил ветки Git, и все ошибки вернулись. К счастью, я повторил описанные выше шаги по выгрузке / перезагрузке небольшого проекта, и ошибки исчезли.

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

HgCoder
источник
Исходя из этого, я выгрузил три проекта, связанных с «Тестом» или «Архитектурой», затем выгрузил и перезагрузил проект Intellisense с ошибками (WPF). 0 из 0 ошибок :) +1 за отдельные детали, которые побудили меня попробовать что-то похожее на вас HgCoder!
Steven_BDawg
Использование VS 2017 15.9.9. Используя Git. Используя R #. Я тоже регулярно меняю ветки. Мои ошибки действительно связаны с IntelliSense. Я заметил, что при выгрузке проекта столбец «Проект» (на вкладке «Список ошибок») переходит в <Неизвестно>. Так что, похоже, это немного пошло на пользу. Мне кажется, что разгрузка проектов тоже сработала. Решение Clean Solution + Rebuild, наконец, дало 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, исчезли.

Fabian
источник
1

Я видел ошибки intellisearch только при публикации веб-сайта. (Сайт ASP / C #, VS 2017). Они сломали публикацию. Сайт работал нормально локально.

Устранены ошибки, сняв флажок с параметра предварительной компиляции, и он опубликован нормально. Опубликовать -> Настройка -> Параметры публикации файла -> Предварительная компиляция во время публикации

Рана
источник
1

В Visual Studio 2019 проблема заключается в изменении веток с помощью Git, когда в проекте установлены пакеты NuGet. Что я сделал, чтобы решить эту проблему:

  1. Чистое решение
  2. Закройте Visual Studio
  3. Удалите папку пакетов
  4. Откройте Visual Studio
  5. Перейти в диспетчер пакетов
  6. Восстановить все пакеты
  7. Рекомпилированные
  8. Если roslyn отсутствует, закройте и откройте Visual Studio, а затем перекомпилируйте.
Даниэль Лобо
источник