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