远程调试.NET Core Linux Docker容器 - “当前源与.dll中内置的版本不同”

时间:2017-06-07 00:01:36

标签: c# .net linux docker asp.net-core

  • 泊坞
  • .NET Core 1.1
  • Visual Studio 2017
  • .NET核心调试器(clrdbg)

我收到以下错误:

"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."

enter image description here

我将逐步掌握如何构建我的.NET Core Docker镜像并从此图像运行Container实例,然后使用Visual Studio 2017连接远程,我的Dockerfile.debug位于我的问题的底部

  1. 在我的docker host cd ~/repos/api.security // git repository
  2. git pull //从git for .NET Core项目中提取最新代码
  3. dotnet restore
  4. dotnet publish //没有其他args发布.pdbs
  5. docker build -t tsl.api.security.image.debug -f Docker.debug .
  6. docker run -d -p 8080:5000 -p 10222:22 --name=tsl.api.security.container.debug -t tsl.api.security.image.debug //在端口5000上运行并将我的.NET Core Webapi映射到主机端口8080并将容器端口22中的ssh映射到主机上的端口10222
  7. docker exec -it tsl.api.security.container.debug bash //终端从主机
  8. 运行容器
  9. /usr/sbin/sshd //启动sshd
  10. 好的,现在该容器已准备好使用Visual Studio 2017在我的机器上使用Visual Studio 2017进行远程调试:

    1. 从git
    2. 中提取最新代码
    3. 使用Visual Studio 2016打开.sln
    4. 内置调试
    5. 转到工具 - >选项 - >跨平台和我的SSH远程:enter image description here
    6. CTRL + ALT + P //附加到流程
    7. 选择连接类型 - > SSH enter image description here
    8. 选择托管(适用于Unix的.NET Core) enter image description here
    9. 中提琴!我们有问题: enter image description here

      如果我们在Docker Container中查看/app,我们可以看到pdbs:enter image description here

      源代码是一样的,就像我的工作流程说明中的git pull步骤所示。

      不确定从这里开始......

      这是我的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"]
      

1 个答案:

答案 0 :(得分:7)

Tools->Options->Debugging->General,关闭"要求源文件与原始版本完全匹配"。不理想,但至少它会达到VS2017源代码中设置的断点。

一旦找到如何正确解决此问题,请通知我。