Отладка службы Topshelf

Я использую 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?


person Mark Olbert    schedule 04.01.2018    source источник


Ответы (1)


Хорошо, оказывается, проблема была связана с отладкой смешанного кода NetStandard и NetOriginal ...

Библиотеки классов NetStandard по умолчанию не генерируют информацию о символах отладки, используемую приложениями NetOriginal. Вам нужно перейти в Project Properties -> Build -> Advanced и изменить тип создаваемой отладочной информации с Portable на Full.

Как только я внес это изменение, я смог войти в код библиотеки классов как обычно.

Я нашел это в соответствующий файл символов не был найден в эта папка

person Mark Olbert    schedule 04.01.2018
comment
Поскольку эта проблема была решена, вы можете пометить ее как ответ, чтобы помочь другим членам сообщества, у которых возникла такая же проблема. Хорошего дня:) - person Jack Zhai-MSFT; 08.01.2018