- Docker
- .NET Core 1.1
- Visual Studio 2017
- .NET Core Debugger (clrdbg)
I am receiving the following error:
"The breakpoint will not currently be hit. A copy of TokenController.cs was found in TSL.Security.Service.dll, but the current source code is different from the version built into the TSL.Security.Service.dll."
I will got step by step how I build my .NET Core Docker image and run a Container instance from this image, and then connect remote with Visual Studio 2017, my Dockerfile.debug is at the bottom of my question:
- on my docker host
cd ~/repos/api.security
//a git repository git pull
//pull latest code from git for .NET Core projectdotnet restore
dotnet publish
//with no other args publishes with .pdbsdocker build -t tsl.api.security.image.debug -f Docker.debug .
docker run -d -p 8080:5000 -p 10222:22 --name=tsl.api.security.container.debug -t tsl.api.security.image.debug
//run and map my .NET Core Webapi in Container on port 5000 to host port 8080 and map ssh in the Container, port 22, to port 10222 on the hostdocker exec -it tsl.api.security.container.debug bash
//terminal into running container from host/usr/sbin/sshd
//start sshd
Ok great, now that container is ready for remoting debugging, using ssh with Visual Studio 2017, on my machine with Visual Studio 2017:
- pull latest code from git
- open .sln with Visual Studio 2016
- Build in Debug
- Go to Tools -> Options -> Cross Platform and my SSH Remote:
- CTRL + ALT + P //attach to process
- Select Connection Type -> SSH
- Select Managed (.NET Core for Unix)
If we look at /app
in my Docker Container we can see pdbs:
And the source code is the same, as the git pull steps in my workflow explanation demonstrates.
Not sure where to go from here...
Here is my Dockerfile.debug:
# Use the standard Microsoft ASP.NET Core container
FROM microsoft/aspnetcore
# File Author / Maintainer
MAINTAINER Brian Ogden
WORKDIR /
RUN apt-get update && apt-get install -y unzip
RUN apt-get install -y openssh-server
RUN mkdir /var/run/sshd
RUN echo 'root:password' | chpasswd
RUN sed -i 's/PermitRootLogin without-password/PermitRootLogin yes/' /etc/ssh/sshd_config
RUN sed 's@session\s*required\s*pam_loginuid.so@session optional pam_loginuid.so@g' -i /etc/pam.d/sshd
ENV NOTVISIBLE "in users profile"
RUN echo "export VISIBLE=now" >> /etc/profile
#install CLRDBG, Microsoft's new cross-platform command line debugger used for debugging code running on .NET Core
RUN curl -sSL https://aka.ms/getclrdbgsh | bash /dev/stdin vs2015u2 ~/clrdbg
# Copy our code from the "/src/MyWebApi/bin/Debug/netcoreapp1.1/publish" folder to the "/app" folder in our container
WORKDIR /app
COPY ./src/TSL.Security.Service/bin/Debug/netcoreapp1.1/publish .
# Expose port 80 for the Web API traffic
ENV ASPNETCORE_URLS http://+:5000
EXPOSE 5000 22
ENTRYPOINT ["dotnet", "TSL.Security.Service.dll"]
Tools->Options->Debugging->General
, turn off "Require source files to exactly match the original version". Not ideal, but at least it hits the breakpoint set in the source code in VS2017.Please let me know once you find out how to properly fix this.