调试Topshelf服务

时间:2018-01-04 16:26:37

标签: c# visual-studio-debugging topshelf

我正在使用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类库有关?

1 个答案:

答案 0 :(得分:0)

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

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

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

我在a matching symbol file was not found in this folder

找到了这个