在 JetBrains Rider 中调试来自 docker 的 .Net Core 3 应用程序 运行
Debuging a .Net Core 3 app run from docker compose in JetBrains Rider
我正在尝试 运行 从 docker-compose 本地构建的多容器服务。如果我从 docker 文件调试服务,调试器工作正常,但是当我使用 docker-compose 调试并尝试评估一个对象时,它不起作用。我的项目使用.net core 3
特别是我正在查看初创公司 class。当我在构造函数上放置断点时,我可以评估配置对象。但我感兴趣的领域是 Configure 方法。当我在代码检查环境的位置放置断点时,我收到以下消息。
The name 'env' does not exist in the current context
当我直接从我的 docker 文件调试时,我可以成功地评估这个对象。但是,通过使用 docker-compose 文件进行调试,我能够完全调试分成多个服务的整个应用程序。
我是否遗漏了某些内容或我在某处犯了错误?
我的代码的相关摘录如下。
public class Startup
{
private IConfiguration Configuration { get; }
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public void ConfigureServices(IServiceCollection services)
{
....
}
public void ConfigureContainer(ContainerBuilder builder)
{
...
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
...
context.Database.Migrate();
}
app.Run(async (context) =>
{
await context.Response.WriteAsync("Hello World!");
});
}
}
到目前为止,我已经尝试了一些方法来解决这个问题。这些已确保我已更新 Rider,使用 .Net Core 3 sdk docker 图像,并且我已确保 dotnet build 命令使用调试配置。
我读到的其他一些内容似乎与 VS 在从 docker-compose 构建时所做的优化更相关,所以我不确定这些是否适用于 Rider。
我的docker文件是
FROM mcr.microsoft.com/dotnet/core/sdk:3.1 AS base
WORKDIR /app
ENV ASPNETCORE_ENVIRONMENT Development
EXPOSE 85
EXPOSE 443
FROM mcr.microsoft.com/dotnet/core/sdk:3.1 AS build
WORKDIR /src
COPY EventService/EventService.csproj EventService/
RUN dotnet restore "EventService/EventService.csproj"
COPY . .
WORKDIR "/src/EventService"
RUN dotnet build "EventService.csproj" -c Debug -o /app/build
FROM build AS publish
RUN dotnet publish "EventService.csproj" -c Debug -o /app/publish
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "EventService.dll"]
我的 docker-compose 是
version: '3.4'
services:
eventapi:
image: ${DOCKER_REGISTRY-}eventapi
build:
context: .
dockerfile: EventApi/Dockerfile
networks:
- backend
eventservice:
image: ${DOCKER_REGISTRY-}eventservice
build:
context: .
dockerfile: EventService/Dockerfile
networks:
- backend
depends_on:
- sql.db
sql.db:
image: "microsoft/mssql-server-linux:2017-latest"
environment:
SA_PASSWORD: "myBigDevPassword!"
ACCEPT_EULA: "Y"
ports:
- "1433:1433"
networks:
- backend
networks:
backend: {}
这最终成为一个简单的修复。我只需要将 Rider 更新到最新版本。当它作为 Rider 中的一个功能首次发布时,有一个错误导致了这个问题。
我正在尝试 运行 从 docker-compose 本地构建的多容器服务。如果我从 docker 文件调试服务,调试器工作正常,但是当我使用 docker-compose 调试并尝试评估一个对象时,它不起作用。我的项目使用.net core 3
特别是我正在查看初创公司 class。当我在构造函数上放置断点时,我可以评估配置对象。但我感兴趣的领域是 Configure 方法。当我在代码检查环境的位置放置断点时,我收到以下消息。
The name 'env' does not exist in the current context
当我直接从我的 docker 文件调试时,我可以成功地评估这个对象。但是,通过使用 docker-compose 文件进行调试,我能够完全调试分成多个服务的整个应用程序。
我是否遗漏了某些内容或我在某处犯了错误?
我的代码的相关摘录如下。
public class Startup
{
private IConfiguration Configuration { get; }
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public void ConfigureServices(IServiceCollection services)
{
....
}
public void ConfigureContainer(ContainerBuilder builder)
{
...
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
...
context.Database.Migrate();
}
app.Run(async (context) =>
{
await context.Response.WriteAsync("Hello World!");
});
}
}
到目前为止,我已经尝试了一些方法来解决这个问题。这些已确保我已更新 Rider,使用 .Net Core 3 sdk docker 图像,并且我已确保 dotnet build 命令使用调试配置。
我读到的其他一些内容似乎与 VS 在从 docker-compose 构建时所做的优化更相关,所以我不确定这些是否适用于 Rider。
我的docker文件是
FROM mcr.microsoft.com/dotnet/core/sdk:3.1 AS base
WORKDIR /app
ENV ASPNETCORE_ENVIRONMENT Development
EXPOSE 85
EXPOSE 443
FROM mcr.microsoft.com/dotnet/core/sdk:3.1 AS build
WORKDIR /src
COPY EventService/EventService.csproj EventService/
RUN dotnet restore "EventService/EventService.csproj"
COPY . .
WORKDIR "/src/EventService"
RUN dotnet build "EventService.csproj" -c Debug -o /app/build
FROM build AS publish
RUN dotnet publish "EventService.csproj" -c Debug -o /app/publish
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "EventService.dll"]
我的 docker-compose 是
version: '3.4'
services:
eventapi:
image: ${DOCKER_REGISTRY-}eventapi
build:
context: .
dockerfile: EventApi/Dockerfile
networks:
- backend
eventservice:
image: ${DOCKER_REGISTRY-}eventservice
build:
context: .
dockerfile: EventService/Dockerfile
networks:
- backend
depends_on:
- sql.db
sql.db:
image: "microsoft/mssql-server-linux:2017-latest"
environment:
SA_PASSWORD: "myBigDevPassword!"
ACCEPT_EULA: "Y"
ports:
- "1433:1433"
networks:
- backend
networks:
backend: {}
这最终成为一个简单的修复。我只需要将 Rider 更新到最新版本。当它作为 Rider 中的一个功能首次发布时,有一个错误导致了这个问题。