VSCode и работа с несколькими файлами

Sakolua
Offline
Зарегистрирован: 13.08.2019

В стандартном IDE можно открывать файлы на закладках и это работает нормально без ошибок. Но если открыть такой проект в VSCode - то в каждом не-главном файле он начинает ругаться, что нет определения, подчеркивать все красным и т.п.

Можно ли это пофиксить в настройках VSCode без создания дополнительных файлов заголовков, которые не нужны для обычного иде? Ну типа искать определения по всем файлам? Оно кончено работает, но выглядит некрасиво.

 

b707
Offline
Зарегистрирован: 26.05.2017

А что значит "без файлов заголовков" ? Вы какие файлы-то имеете в виду - много файлов .ino в одном проекте? -

Вообще, нормальная структура проекта такая -

1. Один файл .ino, так сказать главный, содержащий loop() setup()

2. Сколько угодно пар файлов .cpp и соответвующий ему .h

3. Сколько угодно "непарных" файлов .h

все файлы .h перед использованием должны быть подключены директивой #include в тот исходник (исходники), где используются их определения

При таком раскладе ничего не подчеркивается и все определения "подтягиваются" куда надо

 

ЗЫ - чтобы вы не стали спорить - это не свойство VS_Code, это стандартная структура С++ проекта

Sakolua
Offline
Зарегистрирован: 13.08.2019

Ну в главном файле я прописываю глобальную Х
Во втором файлов ИДЕ ее видит и обрабатывает без ошибок.
Но VSCode ее подчеркивает красным с той ошибкой в терминале.

Хотя я и могу перейти к ее определению через меню ПКМ. Т.е. он ее видит и знает где она впервые была упомянута, но зачем тогда ошибка?

b707
Offline
Зарегистрирован: 26.05.2017

Sakolua - вы упорно не пишете, какой у вас "главный файл" - наверно .ino ? И какой второй? - .ino  .cpp или  .h от этого зависит ответ.

Но вообще, в стандартном С++ переменные, обьявленные в одном файле - не становятся автоматически видны во всехдругих. Для того, чтобы ими пользоватся, нужно их в других файлах обьявить с помощью extern или включить один файл в другой через #include

но вообще добавлю, что использование глобальных переменных проекта в подключаемых файлах - это дурной тон. В этом случае, например, вы уже не сможете перетащить этот включаемый файл в другой проект

Sakolua
Offline
Зарегистрирован: 13.08.2019

Ну обычные файлы, проект из ИДЕ пробую открыть в VSCode.
Так понятнее?

b707
Offline
Зарегистрирован: 26.05.2017

ну так как компилятор должен понять, что переменная mode в файле MiniPro-Time.ino - это та же самая переменная mode из case.ino?

В Ардуино всю эту грязную работу делала за вас ИДЕ. А тут все по взрослому. Привыкайте к тому, что в проекте должен быть только один файл .ino. Все остальные - .cpp .h

И все переменные должны быть правильно обьявлены

Sakolua
Offline
Зарегистрирован: 13.08.2019

Но в компиляторе-то проблем как раз и нет. Верификация проходит.
Т.е. надо переместить byte mode; в допустим head.h и потом его #include "head.h" во все остальные файлы несколько раз?

 

b707
Offline
Зарегистрирован: 26.05.2017

Sakolua пишет:

Т.е. надо переместить byte mode; в допустим head.h и потом его #include "head.h" во все остальные файлы несколько раз?

нет, так у вас будет ошибка "многократное описание переменной". Можно в одном файле описать переменную, а во всех остальных обьявить ее extern

Но самое правильное - не создавать переменных, используемых между файлами. Например, передавате свое mode между процедурами как параметр

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

Настоящие IDE и Arduino IDE это разные вещи.

Про Arduino IDE. Вот описание процесса сборки, отличающегося от "нормальных" IDE:

The Arduino environment performs a few transformations to your sketch before passing it to the avr-gcc compiler:

    All .ino files in the sketch folder (shown in the IDE as tabs with no extension) are concatenated together, starting with the file that matches the folder name followed by the others in alphabetical order, and the .cpp extension is added to the filename.
    If not already present, #include <Arduino.h> is added to the sketch. This header file (found in the core folder for the currently selected board) includes all the definitions needed for the standard Arduino core.
    Prototypes are generated for all function definitions in .ino files that don't already have prototypes. In some rare cases prototype generation may fail for some functions. To work around this, you can provide your own prototypes for these functions.
    #line directives are added to make warning or error messages reflect the original sketch layout.

No pre-processing is done to files in a sketch with any extension other than .ino. Additionally, .h files in the sketch are not automatically #included from the main sketch file. Further, if you want to call functions defined in a .c file from a .cpp file (like one generated from your sketch), you'll need to wrap its declarations in an 'extern "C" {}' block that is defined only inside of C++ files.

-----------------------------------------------------------

Для умственных инвалидов,нуждающихся в Гугль переводчике:

В файл для сборки собираем все .ino из папки, начиная с того, чьё имя совпадает с именем папки, далее по алфавиту. Первой строкой добавляем #include <Arduino.h>. Прототипы функций добавляем для тех, у которых его нет. Эта фича работает криво. Лучше пишите прототипы сами.

Никакой доп обработки не делается для файлов .c, .cpp, .h и даже автоинклюда нет, нужно писать ручками, как положено, и если желаем вызывать .с функцию из .cpp файла - придется писать 'extern "C" {}' блок.

----------------------------------------------------------

Отсюда выводы:

1. В Ардуино ИДЕ можно писать по человечески, соблюдая основные правила и не использовать "удобства" среды для новичков. Что означает описание глобальных переменных в .h файле, правильные прототипы и т.д.

2. Если удалось поставить и использовать VS Code с Ардуино плагином, то хочется поинтересоваться - а нахера тогда компилировать в Ардуино ИДЕ?

Sakolua
Offline
Зарегистрирован: 13.08.2019

Так оно необходимо для расширения Ардуины (не Платформ) и используется в нем. Я перенес все в h. Мои переменные пропали из списка ошибок. А это откуда взялось и как исправить?

Кто должен подключать этот файл???

И это отвалилось теперь почему то!

Хотя у олед все нормально.

b707
Offline
Зарегистрирован: 26.05.2017

Arduino.h включите всюду, где используются макросы и прерывания

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

b707 пишет:
Arduino.h включите всюду, где используются макросы и прерывания

VS code настроить нужно, подчеркивает не плагин Ардуино, а плагин С, а ему нужно указать, где и что по умолчанию искать. Я - сам копался с полчаса, когда подчеркивания доставать начали.... пусть и ТС теперь покопается ;))) Это же справедливо? Там файлик json открыться должен... имя  - не помню точно, сорри.

К тому же, мне кажется, что новый плагин уже все правильно сам настраивает, только у ТС Ардуино ИДЕ переносная... а с ней - я просто не пробовал... ну так как не пользую.

Я и с Виндусом не пробовал, и тем более с портабл  ИДЕ. Мне кажется что скрещивание ужа и ежа - дурное занятие. Ардуино ИДЕ - линуксовый изначально продукт, как и всё, что связано с GCC. Тем более на Вин10 теперь есть родной Линух, из МС-стора. Мне кажется, что нужно работать с Линуховыми программами из Линуха. Но это я ворчу... как всегда на "вынь" и её любителей! ;))

 

b707
Offline
Зарегистрирован: 26.05.2017

Я, честно говоря, на подчеркивания вообще не смотрю. Эти подчеркивания пропадают после компиляции.
Пусть ТС не мается дурью, если из-за этих ошибок скетч не компилируется надо добавить хедер Arduino.h, а если все компилируется и так - говорить не о чем

Sakolua
Offline
Зарегистрирован: 13.08.2019

Вообще Arduino.h прописан в force include

darknew
darknew аватар
Offline
Зарегистрирован: 01.11.2017

Здравствуйте, столкнулся с похожей проблемой, есть скетч написанный в Arduino IDE, в скетче 3 файла: comm.ino, EEPR.ino & runout.ino.

при экспорте VS Code он ругается что не хочет иметь дело с *.INOродными файлами, переименовываем в папке проекта расширения в *.cpp.

Во всех файлах есть пересекающиеся переменные, в файл runnout.cpp как в главный я заинклюдил comm.cpp и eepr.cpp, часть ошибок пропала, но теперь в самих файлах comm.cpp и eepr.cpp есть жалобы что переменные не объявлены, переменные объявлены в runnout.cpp и просто #include <runnout.cpp> отделаться не выходит, ругается что "Включаемый файл включает самого себя", и еще часть переменных которые использует файл eepr.cpp содержатся в comm.cpp я так понимаю мне нужно создать заголовочные файлы *.h где нужно объявить нужные переменные extern?

Прошу прощения но я в упор не понимаю содержания этих файлов.

 

b707
Offline
Зарегистрирован: 26.05.2017

потому что сразу надо писать правильно, а не создавать по три файла .ino в проекте.

Файлы .cpp не могут включаться друг в друга директивой #include

Попробуйте основной файл оставить .ino. а два других переименовать в .h и включить их в основной. Но скорее всего это не поможет, так как вы изначально не думали о страуктуре программы и правильном описании переменных - в частности о том, что использование переменных между файлами - это неправильный стиль программирования. Вот за это и расплачиваетесь.

Я бы вам посоветовал этот проект не переносить в VSCode. А следующий уже пишите правильно, с одним файлом .ino . и парами .cpp .h  И чтобы все глобальные переменные были описаны и использовались только в главном файле, а в других файлах - только локальные переменные уровня процедур или файла.

Sakolua
Offline
Зарегистрирован: 13.08.2019

"надо писать правильно, а не создавать по три файла .ino в проекте"
Скажи это разрабам Ардуино ИДЕ, почему они сделали так, что это работает и зачем вообще отошли от канонов? И почему я тогда не должен этим пользоваться? Тем более это удобно.

"в скетче 3 файла"
Парадокс в том, что в vscode можно не делить проект на кучу файлов, а писать сразу все в одном и потом смотреть и редактировать его сразу в нескольких местах в разных окнах. Так что если я раньше делил файлы, потому что мне его скролить надоедало все время в разные места, то в vscode этой проблемы вроде нет.

"я в упор не понимаю"
Ну я в заголвоок перенес все include и define

добавил туда защиту #ifndef

все переменные глобальные типа extern float voltage;

функции void NewLine();

и включил его в каждый кусок кода сверху  #include "header.h"

b707
Offline
Зарегистрирован: 26.05.2017

Sakolua пишет:

Парадокс в том, что в vscode можно не делить проект на кучу файлов, а писать сразу все в одном

маладец!  двигаешься от одного кривого приема программирования к другому... А потом опять будем спрашивать "А почему же VS-Code разрешал мне писать тысяче-строчные портянки, почему не приучал изолировать каждую логически обособленную часть кода в отдельном файле? " :))))

Sakolua
Offline
Зарегистрирован: 13.08.2019

Ну да, лучше я вместо одной переменой на весь проект буду ее копировать 1000 раз в секунду в каждую функцию и потом возвращать.

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Sakolua пишет:

"надо писать правильно, а не создавать по три файла .ino в проекте"
Скажи это разрабам Ардуино ИДЕ, почему они сделали так, что это работает и зачем вообще отошли от канонов? И почему я тогда не должен этим пользоваться? Тем более это удобно.

"в скетче 3 файла"
Парадокс в том, что в vscode можно не делить проект на кучу файлов, а писать сразу все в одном и потом смотреть и редактировать его сразу в нескольких местах в разных окнах. Так что если я раньше делил файлы, потому что мне его скролить надоедало все время в разные места, то в vscode этой проблемы вроде нет.

"я в упор не понимаю"
Ну я в заголвоок перенес все include и define

добавил туда защиту #ifndef

все переменные глобальные типа extern float voltage;

функции void NewLine();

и включил его в каждый кусок кода сверху  #include "header.h"

Ну, значить, в ближайшие полгода ты будешь неиссякаемым источником идиотских вопросов на форуме. Ну, если раньше не пошлют, канеш.  А всего то делов и надо-то, что правильную книшку почитать, с основами.  Но, выбор у человека всегда есть...

b707
Offline
Зарегистрирован: 26.05.2017

Sakolua пишет:

Ну да, лучше я вместо одной переменой на весь проект буду ее копировать 1000 раз в секунду в каждую функцию и потом возвращать.

а ты не пиши такого кода.

понимаешь, твоя беда в том, что писать правильно ты не умеешь - поэтому тебе и кажутся многие вещи "неудобными". А учиться почитаешь западло...

Последний раз привожу пример.

Я начинаю новый проект. Из одного старого проекта беру класс кнопок, из другого - работу с дисплеем, их третьего кольцевой буфер или сэйт-машину. Все, спустя 2 минуты после открытия нового проекта у меня в нем лежит уже 3/4 кода, если считать по числу строк. Остается только написать связки между готовыми модулями в loop() - чаще всего не более сотни строчек.

А если тебе нравится каждый раз свои 500-1000 строк переписывать - или возиттся с выискиванием "сниппентов" в готовом коде - продолжай все пихать в один файл, мне пояиг.

Sakolua
Offline
Зарегистрирован: 13.08.2019

Странные люди, приходишь в форум "Для новичков"
Спрашиваешь как лучше сделать?

А они тебе в ответ: почитай какую-нибудь книгу, "мне пояиг" я все сделал у меня "лежит уже 3/4 кода" "учиться почитаешь западло..."

Гран мерси за столь полезные советы

b707
Offline
Зарегистрирован: 26.05.2017

Sakolua пишет:

Спрашиваешь как лучше сделать?

А они тебе в ответ: почитай какую-нибудь книгу

а ты что ожидал? Что мы тебе учебник перескажем? - смешной...

Мы только направление можем указать - что надо делать, а что нет. А как - это уже сам. Спроси у любого, кто что-то знает - все по учебникам учились.

Кроме того, разве советы "не открывай по три .ino в одном проекте", "Не клади весь код в один файл". "избегай общих переменных между разныит файлами" - это не ответы на вопрос "Как лучше сделать?" - только ведь тебя они не устраивают, у тебя свои представления о правильной структуре программы. Вот и пользуйся своими знаниями, не задавай вопросов, ответы на которые ты не готов понять.

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

Sakolua пишет:

Странные люди, приходишь в форум "Для новичков"
Спрашиваешь как лучше сделать?

А они тебе в ответ: почитай какую-нибудь книгу, "мне пояиг" я все сделал у меня "лежит уже 3/4 кода" "учиться почитаешь западло..."

Гран мерси за столь полезные советы

А зачем ты пришел на форум с такими вопросами?

На форум поваров с вопросом: как жарить яичницу? Или на форум медиков с вопросом о пользе аспирина. Зачем так делать, а потом обижаться на то, что посылают книжку читать? Странный ты, чел.

darknew
darknew аватар
Offline
Зарегистрирован: 01.11.2017

b707 пишет:

потому что сразу надо писать правильно, а не создавать по три файла .ino в проекте.

Файлы .cpp не могут включаться друг в друга директивой #include

Попробуйте основной файл оставить .ino. а два других переименовать в .h и включить их в основной. Но скорее всего это не поможет, так как вы изначально не думали о структуре программы и правильном описании переменных - в частности о том, что использование переменных между файлами - это неправильный стиль программирования. Вот за это и расплачиваетесь.

Проблема в том что проект достался мне как есть, товарищ сделал очень удобный проект дифф датчика толщины нити для 3д принтера, и он написан в Ардуино ИДЕ, но он использует около 20% контроллера, остальное пустое, куча выводов, и мне хотелось дописать в готовый проект кусок своего кода, к сожалению знаний моих с гулькин нос, и я не знаю как переработать готовый проект чтоб его смог нормально переварить VSCode, в файлах много пересекающихся переменных, видимо в этом и косяк, включить два файла с процедурами в главный файл получилось, и ошибки с не объявленными переменными пропали, но ошибки в подчиненных файлах никуда не делись, попробую разделить переменные заданные в главном файле по дочерним, но не уверен в успехе, видимо лучший вариант это дописывать проект в Ардуино ИДЕ.

b707 пишет:

Я бы вам посоветовал этот проект не переносить в VSCode. А следующий уже пишите правильно, с одним файлом .ino . и парами .cpp .h  И чтобы все глобальные переменные были описаны и использовались только в главном файле, а в других файлах - только локальные переменные уровня процедур или файла.

Может подскажите где прочесть про правильную структуру проекта в VSCode, на *.ino VSCode вабще жалуется что дескать не поддерживает их, и сконвертируйте же их быстрее в *.cpp.

может где-то есть описание правильной структуры проекта, но я его пропустил?

 

Спасибо.

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

darknew пишет:

Может подскажите где прочесть про правильную структуру проекта в VSCode, на *.ino VSCode вабще жалуется что дескать не поддерживает их, и сконвертируйте же их быстрее в *.cpp.

Я тебе так скажу, VSCode требует, всего лишь, чтоб .ino в проекте был только один, остальные - .срр и .h  

А видимость переменных и функций в нужном месте хорошо описана в первоисточнике всех книг по Си (K&R). Если одолеешь этот манускрипт сакральных знаний, там даже не всё, а несколько первых глав, то извращенного секса в твоей жизни станет существенно меньше (но, прибавица тантрического). 

darknew
darknew аватар
Offline
Зарегистрирован: 01.11.2017

Кернигана и Ритчи так и не осилил, надо возобновить чтение значит.

Feofan
Offline
Зарегистрирован: 28.05.2017
DetSimen пишет:
... VSCode требует, всего лишь, чтоб .ino в проекте был только один, остальные - .срр и .h
Видимо мне достался покладистый - без проблем переваривает скетч из пяти *.ino и с десяток *.h/*.cpp. Да, структура не нормальная, но... исправляюсь.
LogicR
LogicR аватар
Offline
Зарегистрирован: 15.06.2020

Прошу помощи (или хотя бы направления :) ). Сегодня пересел с Arduino IDE на VS Code + Arduino Extension. Проблема -  fatal error: CharMatrix.h: No such file or directory. Структура до безобразного проста, т.к. только начал пробовать. Один основной .ino и подключен #include "CharMatrix.h" и пару библиотек. С библиотеками проблем нет, мой файл наотрез отказывается находится. 

Облазил весь гугл. Рекомендации 90% правка c_cpp_properties.json "includePath" - пробовал, добавил "${workspaceFolder}\\**", правка setting.json c параметром "C_Cpp.intelliSenseEngine": "Tag Parser" уже была произведена. Ну и конечно "выключить и включить". Тоже пройдено.

При все при этом VSCode в упор отказывается видеть .h файл, который лежит в одной директории с .ino

Форумчане, прошу помощи!

vde69
Offline
Зарегистрирован: 10.01.2016

LogicR пишет:

Прошу помощи (или хотя бы направления :) ). Сегодня пересел с Arduino IDE на VS Code + Arduino Extension. Проблема -  fatal error: CharMatrix.h: No such file or directory. Структура до безобразного проста, т.к. только начал пробовать. Один основной .ino и подключен #include "CharMatrix.h" и пару библиотек. С библиотеками проблем нет, мой файл наотрез отказывается находится. 

Облазил весь гугл. Рекомендации 90% правка c_cpp_properties.json "includePath" - пробовал, добавил "${workspaceFolder}\\**", правка setting.json c параметром "C_Cpp.intelliSenseEngine": "Tag Parser" уже была произведена. Ну и конечно "выключить и включить". Тоже пройдено.

При все при этом VSCode в упор отказывается видеть .h файл, который лежит в одной директории с .ino

Форумчане, прошу помощи!

у меня так заработало, правда для меги все равно на serial3 ругается, но в целом все более менее нормально

http://arduino.ru/forum/obshchii/vedenie-neskolkikh-proektov-odnovremenno#comment-598495

LogicR
LogicR аватар
Offline
Зарегистрирован: 15.06.2020

vde69 пишет:

у меня так заработало, правда для меги все равно на serial3 ругается, но в целом все более менее нормально

http://arduino.ru/forum/obshchii/vedenie-neskolkikh-proektov-odnovremenno#comment-598495

Благодарю за информацию, но не помогло ( 

Опять "fatal error: CharMatrix.h: No such file or directory"

Не хочу возвращаться на Arduino IDE, VSC - роднее, т.к. сижу на VS. Но ума не приложу, почему не видит файл.

Причем только при компиляции. В коде ничего не подчеркивает и сам подсказывает при вводе имени.

b707
Offline
Зарегистрирован: 26.05.2017

Поищите по менюшкам, там нет такой функции как "включить файл в проект" ?

Например Visual Studio без этого не включает файлы в компиляцию. даже если они лежат в той же директории

LogicR
LogicR аватар
Offline
Зарегистрирован: 15.06.2020

b707 пишет:

Поищите по менюшкам, там нет такой функции как "включить файл в проект" ?

Например Visual Studio без этого не включает файлы в компиляцию. даже если они лежат в той же директории

Пробовал, искал, но найти не смог.

В общем удалил я VS Code и поставил vMicro на любимую VS :)

Вопрос не то чтобы решен, но отпал.

Всем добра!

Feofan
Offline
Зарегистрирован: 28.05.2017

b707
По #include включает без дополнительных телодвижений.

vde69
Offline
Зарегистрирован: 10.01.2016

b707 пишет:

Поищите по менюшкам, там нет такой функции как "включить файл в проект" ?

Например Visual Studio без этого не включает файлы в компиляцию. даже если они лежат в той же директории

есть такой параметр...

 

"forcedInclude": [
13         "C:\\Program Files (x86)\\Arduino\\hardware\\arduino\\avr\\cores\\arduino\\Arduino.h"
14     ],

 

AlexArGC
AlexArGC аватар
Offline
Зарегистрирован: 18.11.2016

Sakolua пишет:

В стандартном IDE можно открывать файлы на закладках и это работает нормально без ошибок. Но если открыть такой проект в VSCode - то в каждом не-главном файле он начинает ругаться, что нет определения, подчеркивать все красным и т.п.

...

Дело в том, что IntelliSens провайдер (VS Code) просто не знает об этих определениях в других файлах INO поэтому и подчеркивает. Коллеги по цеху правы, по поводу правильного построения проекта в соответствии со стандартом Си. Если бы вы внимательно прочитали описание к дополнению на маркетплейсе MS Arduino VS Code, то наверное вопрос был бы снят. Там явно написано как правильно добавлять новые хедеры в проект, создавая одноименные папки...

Предкомпилятор и скрипт Arduino корректно обрабатывают эти включения файлов INO поэтому программа у вас собирается корректно. Но можно попробовать даже в такой странной ситуации вам помочь. Результат будет не 100%, т.к. не известно сколько еще включений могут содержать ваши INO файлы.

Для общего понимания.

Если в настройках расширения Arduino вы добавите папку build в файле .vscode\arduino.json и выполните в командной строке (F1) Arduino: Verify.

И потом загляните в файл (в моём случае) build\sketch\SmartHOME-Arduino.ino.cpp что вам собрал предкомпилятор, то вы увидите объединенные INO файлы в одном CPP-файле, с уже объявленными прототипами и реализациями всех функций. Особенно будет бросаться в глаза подобная записи #line:

Чего сделать?

Чтобы IntelliSense анализировал другие файлы можно проделать такой фокус:

1. Сначала выполним сборку проекта открыв главный скейтч и запустив Arduino: Verify

2. Открываем  параметры расширения Arduino выбираем вкладку (Рабочее пространство) и включаем Arduino: Disable Intelli Sense Auto Gen (он нам перестанет каждый раз генерировать новый файл c_cpp_properties.json с конфигурацией Arduino.

3. Жмем F1 и открываем Конфигурация IntelliSense и видим этот же файл c_cpp_properties.json только в графическом виде.

4. Переходим на вкладку Дополнительные параметры и в поле "Принудительное включение" добавляем все наши INO файлы:

На скрине ошибка, первым файлом лучше поставить основной INO скейтч файл!

P.S.

arduino.json - создается когда вы инициализируете новый проект или конфигурируете его в командной консоли F1 через "Arduino: <команда>"

c_cpp_properties.json - создается автоматически при старте или открытии проекта, это настройки для нашего IntelliSense

settings.json - создается когда вы начнете изменять параметры самого расширения Arduino (все поля описаны в оригинальной статье на маркетплейсе MS.

Ваши исправления из п.4 могут удалиться при каждой новой генерации c_cpp_properties.json например случайно, поэтому вы можете изменить имя конфигурации на "Arduino MY". Чтобы не потерять свои изменения.

Однако если вы будете добавлять в проект новые библиотеки, то вам придется либо ручками править c_cpp_properties.json, либо включать авто-генерацию и потом добавлять свои изменения. Другого метода я не знаю. Почему то параметр Объединение конфигураций в IntelliSense у меня не сработал.