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

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 для меньшего проекта, который я выгружаю / перезагружаю. Непонятно, почему эта последовательность решает мою проблему.


Исходя из этого, я выгрузил три проекта, связанных с «Тестом» или «Архитектурой», затем выгрузил и перезагрузил проект 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, исчезли.


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, а затем перекомпилируйте.
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.