我已经创建了一个针对.NET Framework的标准ASP.NET网站,并使用Docker-compose在Docker中运行它。
调试网站时,网站“启动”代码中的任何断点都不会被击中。
控制器中的断点达到预期。
在IISExpress中运行时,我立即在启动代码中遇到了断点。
在我看来,VS 2019似乎并没有及时附加到网站上,从而无法达到启动代码中的断点。
我已经在ASP.NET Core网站上尝试了同样的方法,并且Program.Main()方法中的断点立即被击中。
我尝试将Docker组成的“启动操作”设置为“什么都不做”,以避免在我提出请求之前网站无法启动,但是没有运气。
Dockerfile:
FROM mcr.microsoft.com/dotnet/framework/aspnet:4.7.2-windowsservercore-1803
ARG source
WORKDIR /inetpub/wwwroot
COPY ${source:-obj/Docker/publish} .
Docker-compose.yml:
version: '3.4'
services:
mydockerizedwebapp:
image: ${DOCKER_REGISTRY-}mydockerizedwebapp
container_name: mydockerizedwebapp
build:
context: .\MyDockerizedWebApp
dockerfile: Dockerfile
Docker-compose.override.yml:
version: '3.4'
services:
mydockerizedwebapp:
ports:
- "80"
networks:
default:
external:
name: nat
有人知道如何及时附加Visual Studio调试器,以便我在启动代码中命中断点吗?
编辑:
如果在网站启动时发生异常,导致异常停机,则对Web服务器的下一个请求将“重新启动”该异常,并命中断点。但是为什么他们不第一次打呢?
答案 0 :(得分:0)
您可以让您的应用程序等待调试器附加:
#if Debug_Break
while (!Debugger.IsAttached)
{
Thread.Sleep(500);
}
Debugger.Break();
#endif
您可以添加Debug_Break配置,也可以仅删除#if。将此代码放在启动部分。
请注意,出于明显的原因,您不希望在发行版二进制文件中使用此代码。