关闭 VS2019 后应用程序池停止

App Pool is stopping after closing VS2019

我有一个 .NET Core 3.1 应用程序,每次执行以下操作时它都会在 IIS 上停止其应用程序池:

  1. 我调试我的代码
  2. 停止调试器
  3. 关闭 Visual Studio 2019

如果我只是停止调试器,这不会发生,它只会在我停止调试我的代码后关闭 Visual Studio 2019 后发生。

我尝试了一些方法,但没有解决问题。

有人遇到过吗?

我认为这是预期的行为。

默认情况下 Visual Studio 使用 IIS Express 托管您的站点。 IIS Express 是一项服务,它在您开始调试时由 Visual Studio 启动,并继续 运行 直到您关闭 Visual Studio(或手动停止它)。

如果您希望它持续存在,那么您需要使用 Express 以外的本地 IIS 实例进行调试。

我在我的 Viual 工作室和本地 IIS 上尝试了同样的事情。当我关闭 visual studio 时,工作进程也会终止。

因此查看了事件查看器,但当时没有任何记录。 然后我为断点 ntdll!NtTerminateProcess.At 创建了调试诊断工具规则,这次生成了一个转储。

这是所有线程的完整堆栈跟踪

.  0  Id: 688.415c Suspend: 1 Teb: 00000039`02299000 Unfrozen
 # Child-SP          RetAddr           Call Site
00 00000039`0247f938 00007ffb`15c6a954 ntdll!NtTerminateProcess
01 00000039`0247f940 00007ffb`1486cd8a ntdll!RtlExitUserProcess+0x54
02 00000039`0247f970 00007ffb`147da245 kernel32!ExitProcessImplementation+0xa
03 00000039`0247f9a0 00007ffb`147da8b5 msvcrt!_crtExitProcess+0x15
04 00000039`0247f9d0 00007ff7`79ca3214 msvcrt!doexit+0x171
05 00000039`0247fa40 00007ffb`14867bd4 w3wp!__wmainCRTStartup+0x164
06 00000039`0247fa80 00007ffb`15c6ced1 kernel32!BaseThreadInitThunk+0x14
07 00000039`0247fab0 00000000`00000000 ntdll!RtlUserThreadStart+0x21

   1  Id: 688.afc Suspend: 1 Teb: 00000039`022a3000 Unfrozen
 # Child-SP          RetAddr           Call Site
00 00000039`026ff848 00007ffb`15c34060 ntdll!NtWaitForWorkViaWorkerFactory+0x14
01 00000039`026ff850 00007ffb`14867bd4 ntdll!TppWorkerThread+0x300
02 00000039`026ffc10 00007ffb`15c6ced1 kernel32!BaseThreadInitThunk+0x14
03 00000039`026ffc40 00000000`00000000 ntdll!RtlUserThreadStart+0x21

   2  Id: 688.3f78 Suspend: 1 Teb: 00000039`022a5000 Unfrozen
 # Child-SP          RetAddr           Call Site
00 00000039`0277f858 00007ffb`13266951 ntdll!NtDelayExecution+0x14
01 00000039`0277f860 00007ffb`0aba6bdb KERNELBASE!SleepEx+0xa1
02 00000039`0277f900 00007ffb`0ab748e4 winhttp!SafeTerminateDll+0xcb
03 00000039`0277f940 00007ffb`15c305ac winhttp!FailFastThreadpoolWaitCallback<&SafeTerminateDll>+0x14
04 00000039`0277f980 00007ffb`15c341c2 ntdll!TppExecuteWaitCallback+0xa4
05 00000039`0277f9d0 00007ffb`14867bd4 ntdll!TppWorkerThread+0x462
06 00000039`0277fd90 00007ffb`15c6ced1 kernel32!BaseThreadInitThunk+0x14
07 00000039`0277fdc0 00000000`00000000 ntdll!RtlUserThreadStart+0x21

   3  Id: 688.748 Suspend: 1 Teb: 00000039`022b9000 Unfrozen
 # Child-SP          RetAddr           Call Site
00 00000039`02bff848 00007ffb`15c34060 ntdll!NtWaitForWorkViaWorkerFactory+0x14
01 00000039`02bff850 00007ffb`14867bd4 ntdll!TppWorkerThread+0x300
02 00000039`02bffc10 00007ffb`15c6ced1 kernel32!BaseThreadInitThunk+0x14
03 00000039`02bffc40 00000000`00000000 ntdll!RtlUserThreadStart+0x21

   4  Id: 688.3b38 Suspend: 1 Teb: 00000039`022bd000 Unfrozen
 # Child-SP          RetAddr           Call Site
00 00000039`02cffad8 00007ffb`132784c3 ntdll!NtRemoveIoCompletion+0x14
01 00000039`02cffae0 00007ffa`b8a238e2 KERNELBASE!GetQueuedCompletionStatus+0x53
02 00000039`02cffb40 00000000`00000000 <Unloaded_aspnetcore.dll>+0x38e2

   5  Id: 688.3cf8 Suspend: 1 Teb: 00000039`022c9000 Unfrozen
 # Child-SP          RetAddr           Call Site
00 00000039`024ff788 00007ffb`15c34060 ntdll!NtWaitForWorkViaWorkerFactory+0x14
01 00000039`024ff790 00007ffb`14867bd4 ntdll!TppWorkerThread+0x300
02 00000039`024ffb50 00007ffb`15c6ced1 kernel32!BaseThreadInitThunk+0x14
03 00000039`024ffb80 00000000`00000000 ntdll!RtlUserThreadStart+0x21

你可以看到当你关闭visual studio时,它只是调用一个安全终止函数并终止进程。没有产生奇怪的行为或异常。所以它必须是设计使然。

如果您转到 IIS 管理器,您将看到应用程序池在您关闭 VS 时停止。

如果您不想visual studio 破坏您的 IIS 工作进程。然后请在其他配置文件环境中调试并发布发布版本到您的本地IIS。