我打开了命令行并使用dotnet run
命令运行我的应用程序。这将启动Kestrel并启动我的应用程序。
我应该如何识别要附加调试器的进程,以便我可以调试Kestrel托管的网站?
我特别需要能够以这种方式进行操作-这意味着我不能使用标准的F5调试快捷键。
我打开了命令行并使用dotnet run
命令运行我的应用程序。这将启动Kestrel并启动我的应用程序。
我应该如何识别要附加调试器的进程,以便我可以调试Kestrel托管的网站?
我特别需要能够以这种方式进行操作-这意味着我不能使用标准的F5调试快捷键。
很遗憾,目前使用Visual Studio或.NET Core提供的工具无法确定。不过请注意,社区已经在这里请求此功能,所以您可以在那里发表您的意见。
目前最好的选择是按照步骤查找给定应用程序端口的进程ID:
netstat -abon | findStr "127.0.0.1:{PORTNUMBER}"
dotnet.exe
(为了更快的查找)如果您感到有冒险精神,可以使用类似于此PowerShell的内容,它会直接返回端口号:
$string = netstat -abon | findStr "127.0.0.1:{PORTNUMBER}"; $results = $string.split(' '); $results[$results.length - 1]
Console.WriteLine($"Running at pid {System.Diagnostics.Process.GetCurrentProcess().Id}");
虽然这个问题比较老,但是我们有一个解决方案。
从零开始,使用$ dotnet run
将创建一个Kestrel的单实例,所以很容易从Visual Studio进行附加调试。
然而,运行$ dotnet build && dotnet run
将创建一个构建服务器实例和一个Kestrel实例。现在很难知道要附加到哪个dotnet
进程。此外,多次运行此命令可能会创建额外的进程。
我们的解决方案是使用$ dotnet build && dotnet build-server shutdown && dotnet run
。这样,在构建之后停止构建服务器,现在只有一个dotnet
进程可以附加到。
这里可能会有其他解决方案: https://github.com/dotnet/cli/issues/9481