docker - .NET Core应用程序中开发容器安装的源依赖项不匹配

标签 docker asp.net-core

我正在尝试为新的ASP.NET Core应用程序设置开发环境。理想情况下,我想在本地容器中运行该应用程序以确保开发/产品奇偶校验。但是,由于我的主机(mac)上的二进制依赖项与容器上的二进制依赖项不同,因此我目前在此方面遇到了一些困难。由于我已经在容器中安装了基本应用程序目录,因此当容器恢复依赖关系时,它将覆盖本地依赖关系,该本地依赖关系必须是其他二进制文件。这会导致我的IDE失去Intellisense以及对文件的理解,并且错误在代码库中随处可见。

我正在使用以下Dockerfile:

FROM microsoft/dotnet:2.0-sdk
WORKDIR /app/UnmIdi.Consilio.Api

# copy everything and build the project
# RUN dotnet restore UnmIdi.Consilio.Api/*.csproj
ENV ASPNETCORE_ENVIRONMENT Development
ENV ASPNETCORE_URLS http://[::]:8000
CMD ./run.sh
run.sh包含:
#!/bin/sh
dotnet restore
dotnet watch run

当我启动容器进行开发时,我正在使用以下docker-compose.yml设置:
version: '3'
services:
  web:
    build:
      context: ./Backend
      dockerfile: Dockerfile.development
    ports:
      - "5555:8000"
    volumes:
      - ./Backend/:/app
  frontend:
    ...
  postgres:
    ...
  redis:
    ...

有没有一种方法可以使用这种设置并保留本地依赖关系,以便我的IDE能够正常运行?

最佳答案

您可以通过将obj/bin/目录移动到不同位置来分离在容器内部和在主机中编译的二进制文件。您可以通过覆盖MSBuild属性“BaseIntermediateOutputPath”和“OutputPath”来实现。

一种方法是将名为Directory.Build.props的文件添加到解决方案目录中,其值如下所示

<Project>
  <PropertyGroup>
    <BaseIntermediateOutputPath>$(MSBuildProjectDirectory)/../obj/</BaseIntermediateOutputPath>
    <BaseOutputPath>$(MSBuildProjectDirectory)/../bin/</BaseOutputPath>
  </PropertyGroup>
</Project>

有关如何执行此操作的更多详细信息,请参见http://www.natemcmaster.com/blog/2017/11/13/dotnet-watch-and-docker/

关于docker - .NET Core应用程序中开发容器安装的源依赖项不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48155327/

相关文章:

node.js - Dockerfile env 依赖的起点

terminal - 无法将终端附加到 docker 中正在运行的容器

c# - 无法从在 Docker (Linux) 中运行的 ASP.NET Core 连接到 SQL Server 命名实例

asp.net-core - JsonPatchDocument 未正确绑定(bind)

c# - 如何从登录用户获取 "B2C JWT Access Token"?

c# - 同时有多个请求时的意外连接状态

java - java.lang.NoSuchFieldError:ECS中启动时的SIGNING_REGION不会在本地发生

linux - 将主机端口转发到 docker 容器

Wordpress wp-config.php 不会在 Dockers 中更新?

c# - 无法调试 Blazor wasm