我正在使用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类库有关?
好的,事实证明问题与调试混合NetStandard和NetOriginal代码库有关...
默认情况下,NetStandard类库不会生成NetOriginal应用程序可用的调试符号信息。您必须进入项目属性 - >构建 - >高级,并将生成的调试信息类型从Portable更改为Full。
一旦我做了这个改变,我就能按照惯例进入类库代码。