Можно ли автоматизировать процесс?
Одно слово - systemd.
Загружаете файлы на сервер во временную папку
копируете их из временной папки в папку с екзешниками
systemctl ... restart
Можно ли как-то в visual studio сделать чтобы перед публикацией она подключилась по SHH, вошла под root, остановила сервис, опубликовала файлы и вновь запустила сервис?
Visual studio тут не нужна, как и FTP - всё можно сделать одним bash / powershell скриптом. Загружать файлы рекомендую через scp или через rsync.
И дополнительный вопрос, как сделать чтобы остановка сервиса не нарушила работу приложения?
Завести два сервера и делать сине-зелёный деплой.
Ну или два экземпляра сервиса.
Или если сервис остановится в процессе выполнение участка коды, который нельзя прерывать
У Generic host есть механизм
graceful shutdown.
Если приходит сигнал на остановку - критичный сервис может это обработать и нормально доделать свои дела (ну или нормально отменить всё) перед выключением.
Для сложных сценариев деплоя есть ещё
Octopus и всякие докеры/кубернетесы. (но если контейнеры не используются, или не хочется оверинжинирить с кубером - можно обойтись одним только октопусом)