Я использую Topshelf для создания службы Windows, которая использует драйвер chrome Selenium для управления и анализа различных веб-страниц.
Хотя служебный код отлично работает из обычного (NetCore2) консольного тестового приложения, возникает проблема, когда он запускается под консольным приложением Win32, которое требует Topshelf.
К сожалению, я не смог понять, как отлаживать код базовой службы. Отладчик VS2017, похоже, подключен к консольному приложению Topshelf, но не позволяет мне войти в базовый код службы, который находится в отдельной библиотеке классов NetStandard2. В частности, когда я подхожу к этой строке в консольном приложении Topshelf:
var scanEntry = _scanner.Run();
где _scanner - это экземпляр объекта, который выполняет фактическое сканирование, я не могу войти в код (т.е. F11 просто переступает через строку).
Я попытался вставить следующую строку в код сканирования библиотеки классов:
System.Diagnostics.Debugger.Launch();
но ничего не делает; код просто продолжает весело выполняться.
Я подозреваю, что это связано с тем, что код сканирования выполняется в отдельном процессе, который запускает Topshelf. Но я не смог понять, как идентифицировать это с помощью механизма Visual Studio Attach to Process.
Было бы очень полезно указать, как отлаживать базовый сервисный код, когда он работает под Topshelf.
Дополнительная информация
Когда я попытался остановиться на этой строке _scanner.Run () и использовать контекстное меню для одного шага в коде библиотеки классов (вместо использования F11), мне было предложено отключить Just My Code, что я и сделал. Затем отладчик VS попытался войти в код библиотеки классов, но пожаловался, что не может найти файл символов библиотеки (* .pdb).
Что действительно странно, потому что файл символов с таким именем существует в папке bin для консольного приложения Topshelf.
Я попытался вручную открыть файл pdb из папки bin, но получил сообщение об ошибке: «Соответствующий файл символов не найден в этой папке».
Связано ли это с попыткой отладки библиотеки классов NetStandard2 из простого старого консольного приложения Net?