Решая довольно элементарную задачу и не осилив спартанских условий разработки под ESP8266 решил вернуться в уютный мир .Net в котором есть и автодополнение и отладка. Итак, имеем на руках: Разработка будет вестись в Visual Studio Code с установленным расширением C#.  Необходим установленный .NET Core SDK.  Также желательно иметь версию Windows 10 1803, так как в неё по умолчанию установлен OpenSSH. В более ранних версиях Windows 10 OpenSSH можно установить через "Управление дополнительными компонентами". Однако при этом ни что не запрещает пользоваться сторонними SSH клиентами. В первую очередь необходимо настроить SSH доступ по ключу. В этом отлично помогает отличная инструкция от Digital Ocean. *Примечание:  Приватные ключи можно хранить отдельными файлами в папке .ssh, но я рекомендую использовать довольно удобную связку KeePass+KeeAgent. KeePass обеспечивает безопасное хранение ключа, а KeeAgent предоставляет ключи. Для того, чтобы он заработал с встроенным в Windows SSH клиентом необходимо активировать соответствующую экспериментальную настройку.* Так как официальный репозиторий Microsoft не содержит пакетов, собранных под ARM32, необходимо установить .NET Core SDK вручную.  В первую очередь неоходимо установим зависимости, перечисленные в документации. Теперь можно установить SDK.  Прямую ссылку на архив c SDK можжно взять со страницы SDK на GitHub. Скрипт установки удалённого отладчика использует unzip: Для установки удалённого отладчика необходимо выполнить следующую команду: Тут всё очень просто: Открываем папку с проектом. Расширение C# автоматически скачает пакеты OmniSharp и .NET Core Debuger, если это не было сделано ранее. После этого нам будет предложено создать assets для сборки и отладки проекта. Соглашаемся на это. В результате появится папка .vscode с файлами tasks.json и launch.json. В этих файлах описаны задачи, которые можно выполнять и конфигурации запуска. По умолчанию создаётся конфигурация запуска отладки, зависящая от задачи сборки. Основная идея запуска и отладки на удалённом устройстве состоит в том, чтобы создать задачи, собирающие проект и копирующие его на устройство и конфигурацию запуска, использующую удалённый отладчик.
Приведу описание готовых задач: Задача publish вызывает команду dotnet publish, которая упаковывает приложение и его зависимости в папку для развертывания.  Команда copy-to-device использует scp для копирования опубликованного приложения на удалённое устройство. Обратите внимание на точку в конце пути из которого происходит копирование. Если её не указать, то при последующих копированиях папка publish будет помещена в DemoProject, а не перезапишет ёё. Параметр dependsOn указывает на то, что copy-to-device зависит от publish. Таким образом перед выполнением copy-to-device выполнится publish. Далее необходимо настроить конфигурацию удалённого запуска и отладки: Параметр "preLaunchTask": "copy-to-device" указывает на то, что перед началом сеанса отладки необходимо выполнить задачу copy-to-device. Таким образом каждый раз перед отладкой будет происходить публикация проекта и его копирование на целевое устройство. Параметр pipeTransport позволяет настроить использование удалённого отладчика. В данном случае в качестве программы, обеспечивающей транспорт используется ssh, но ни что не мешает использовать и plink.exe из набора программ putty.  После нажатия F5 происходит сборка, копирование проекта и запуск приложения на удалённом устройстве. Отладка происходит полностью идентично локальной.  Примечание:
После завершения работы приложения я каждый раз получал сообщение Error from pipe program 'ssh': Process is terminating due to StackOverflowException . Судя по открытому issue на GitHub — это известная проблема отладчика. Но раз ошибка происходит уже после завершения отладки, на это можно не обращать внимания  → Setting up Raspian and .NET Core 2.0 on a Raspberry Pi
→ Omnisharp-vscode Remote Debugging On Linux Arm
→ Справка команды dotnet publish
→ Configuring launch.json for C# debugging
→ Visual Studio Code Integrate with External Tools via Tasks Разработчик