В моем проекте 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;
};
Код: Выделить всё
Gitub для полного примера проекта
Вопрос:
Как настроить Visual Studio или измените мою настройку так что IntelliSense автоматически обновляет свою базу данных, чтобы отразить изменения в созданных файлах .hpp после перестроения? В идеале я хочу, чтобы IntelliSense повторно сканировала затронутые файлы без ручного вмешательства.
Я попробовал несколько подходов, позволяющих IntelliSense автоматически распознавать обновления созданных файлов после перестроения. Некоторые из вещей, которые я пробовал, включают в себя:
- Изменение файла .targets, чтобы сгенерированные файлы были помечены как обновленные, например, касание файлов после их создания. генерируются.
- Попытка связать задачу генерации с целевыми объектами сборки во время разработки (я не уверен, какие именно использовать).
- Экспериментируем с различными настройками проекта и конфигурациями IntelliSense.
- Перезапуск Visual Studio 2019 после внесения изменений.
- Создание журналов TLog с помощью задачи GetOutOfDateItems для отслеживания зависимостей.
К сожалению, ни одна из этих попыток не увенчалась успехом. IntelliSense продолжает показывать устаревшую информацию, пока я вручную не просканирую файлы или не перестрою всю базу данных IntelliSense, что непрактично и отнимает много времени.
Подробнее здесь: https://stackoverflow.com/questions/792 ... l-studio-c
Мобильная версия