调试Topshelf服务

问题描述 投票:1回答:1

我正在使用Topshelf创建一个Windows服务,它使用chrome Selenium驱动程序来操作和解析各种网页。

虽然服务代码可以从普通(NetCore2)控制台测试应用程序运行良好,但是当它在Topshelf所需的Win32控制台应用程序下运行时会出现问题。

不幸的是,我无法弄清楚如何调试底层服务代码。 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)。

这真的很奇怪,因为具有该名称的符号文件存在于Topshelf控制台应用程序的bin文件夹中。

我尝试从bin文件夹手动打开pdb文件,但收到一条错误消息“在此文件夹中找不到匹配的符号文件”。

这是否与尝试从普通的旧Net控制台应用程序中调试NetStandard2类库有关?

c# visual-studio-debugging topshelf
1个回答
0
投票

好的,事实证明问题与调试混合NetStandard和NetOriginal代码库有关...

默认情况下,NetStandard类库不会生成NetOriginal应用程序可用的调试符号信息。您必须进入项目属性 - >构建 - >高级,并将生成的调试信息类型从Portable更改为Full。

一旦我做了这个改变,我就能按照惯例进入类库代码。

我在a matching symbol file was not found in this folder找到了这个

© www.soinside.com 2019 - 2024. All rights reserved.