远程调试.NET Core Linux Docker容器-“当前来源与.dll中内置的版本不同". [英] Remote Debugging .NET Core Linux Docker Container - "the current source is different from the version built into .dll"

查看:244
本文介绍了远程调试.NET Core Linux Docker容器-“当前来源与.dll中内置的版本不同".的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

  • Docker
  • .NET Core 1.1
  • Visual Studio 2017
  • .NET Core调试器(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."

我将逐步构建.NET Core Docker映像并从该映像运行一个Container实例,然后将其与Visual Studio 2017远程连接,我的Dockerfile.debug在我的问题底部:

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:

  1. 在我的Docker主机上cd ~/repos/api.security//一个git存储库
  2. git pull//从git中提取.NET Core项目的最新代码
  3. dotnet restore
  4. dotnet publish//没有其他参数与.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. /usr/sbin/sshd//启动sshd
  1. on my docker host cd ~/repos/api.security //a git repository
  2. git pull //pull latest code from git for .NET Core project
  3. dotnet restore
  4. dotnet publish //with no other args publishes with .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 //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 host
  7. docker exec -it tsl.api.security.container.debug bash //terminal into running container from host
  8. /usr/sbin/sshd //start sshd

好吧,现在容器已准备好在Visual Studio 2017的机器上使用ssh和Visual Studio 2017进行远程调试:

Ok great, now that container is ready for remoting debugging, using ssh with Visual Studio 2017, on my machine with Visual Studio 2017:

  1. 从git中提取最新代码
  2. 使用Visual Studio 2016打开.sln
  3. 内置调试
  4. 转到工具->选项->跨平台和我的SSH远程服务器:
  5. CTRL + ALT + P//附加到进程
  6. 选择连接类型-> SSH
  7. 选择托管(适用于Unix的.NET Core)
  1. pull latest code from git
  2. open .sln with Visual Studio 2016
  3. Build in Debug
  4. Go to Tools -> Options -> Cross Platform and my SSH Remote:
  5. CTRL + ALT + P //attach to process
  6. Select Connection Type -> SSH
  7. Select Managed (.NET Core for Unix)

中提琴!我们有我的问题:

And viola! We have my issue:

如果我们在Docker容器中查看/app,我们会看到pdbs:

If we look at /app in my Docker Container we can see pdbs:

并且源代码是相同的,正如我的工作流说明中的git pull步骤所演示的.

And the source code is the same, as the git pull steps in my workflow explanation demonstrates.

不确定从这里要去哪里...

Not sure where to go from here...

这是我的Dockerfile.debug:

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,关闭要求源文件与原始版本完全匹配".这并不理想,但至少会达到VS2017中源代码中设置的断点.

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.

这篇关于远程调试.NET Core Linux Docker容器-“当前来源与.dll中内置的版本不同".的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆