IntelliSense не обновляется автоматически для созданных файлов в проекте Visual Studio C++C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 IntelliSense не обновляется автоматически для созданных файлов в проекте Visual Studio C++

Сообщение Anonymous »

Я столкнулся с проблемой IntelliSense в Visual Studio, из-за которой он не обновляет базу данных автоматически после перестроения при использовании специального пакета NuGet, который генерирует файлы .cpp и .hpp в процессе сборки.Контекст:
В моем проекте C++ я использую пакет NuGet со специальным файлом .targets. Этот файл .targets запускает инструмент во время процесса сборки (через задачу), который принимает несколько входных файлов, обрабатывает их и генерирует два файла: сгенерированный.cpp и сгенерированный.hpp. Эти файлы затем включаются в проект с помощью ClInclude и ClCompile.
Входные файлы определяют классы и члены, которые использует мой проект, а сгенерированные заголовки включаются в мой код. Сам процесс сборки работает нормально, и IntelliSense изначально распознает эти файлы как положено.
Проблема:
Если я что-то изменю в одном из входных файлов (например, добавить новый член в класс), перестроить проект, а затем попытаться использовать новый член в своем коде, IntelliSense не распознает это изменение. Он показывает ошибки для нового участника, как будто заголовок не был обновлен.
Единственные способы, которые я нашел, чтобы это исправить:
Вручную откройте сгенерированный файл.cpp, щелкните правой кнопкой мыши и выберите «Повторно сканировать файл».
Пересканируйте все решение или удалите базу данных IntelliSense вручную.
Ни то, ни другое не является практичным решением для разработки.< /p>
Минимальный Пример:
Вот упрощенный пример настройки:
Входные файлы
TestInput.file (используются в качестве входных данных для инструмента во время процесс сборки)

Код: Выделить всё

#pragma once
class Test
{
public:
const static int test1 = 1;
const static int test2 = 2;
const static int test3 = 9000;
};
Сгенерированные файлы (созданные с помощью инструмента):
generated.hpp

Код: Выделить всё

#pragma once
class Test
{
public:
const static int test1 = 1;
const static int test2 = 2;
const static int test3 = 9000;
};
Файл фиктивных целей генератора (на целевой файл ссылается основной проект) После изменения TestInput.file (например, путем добавления нового члена класса) и перестройки, при которой TestInput.file просто копируется в TestInput.h, Intellisense не распознает новый член в тестовом классе. пока не будет предложено выполнить повторное сканирование вручную.
Gitub для полного примера проекта
Вопрос:
Как настроить Visual Studio или измените мою настройку так что IntelliSense автоматически обновляет свою базу данных, чтобы отразить изменения в созданных файлах .hpp после перестроения? В идеале я хочу, чтобы IntelliSense повторно сканировала затронутые файлы без ручного вмешательства.
Я попробовал несколько подходов, позволяющих IntelliSense автоматически распознавать обновления созданных файлов после перестроения. Некоторые из вещей, которые я пробовал, включают в себя:
  • Изменение файла .targets, чтобы сгенерированные файлы были помечены как обновленные, например, касание файлов после их создания. генерируются.
  • Попытка связать задачу генерации с целевыми объектами сборки во время разработки (я не уверен, какие именно использовать).
  • Экспериментируем с различными настройками проекта и конфигурациями IntelliSense.
  • Перезапуск Visual Studio 2019 после внесения изменений.
  • Создание журналов TLog с помощью задачи GetOutOfDateItems для отслеживания зависимостей.
    К сожалению, ни одна из этих попыток не увенчалась успехом. IntelliSense продолжает показывать устаревшую информацию, пока я вручную не просканирую файлы или не перестрою всю базу данных IntelliSense, что непрактично и отнимает много времени.
Я ожидал, что IntelliSense автоматически получать изменения в файлах сгенерированных.hpp и сгенерированных.cpp после сборки, так же, как это происходит с обычными исходными файлами, которые я редактирую внутри IDE.

Подробнее здесь: https://stackoverflow.com/questions/792 ... l-studio-c
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»