.NET Core应用程序

时间:2018-01-08 17:38:35

标签: docker asp.net-core

我正在尝试为新的ASP.NET Core应用程序设置开发环境。理想情况下,我想在本地容器中运行应用程序以确保dev / prod奇偶校验。但是,由于我的主机(mac)上的二进制依赖项与容器不同,我目前遇到了一些困难。由于我已经将基本app目录安装在容器中,当容器恢复依赖关系时,它会覆盖本地的,必须是不同的二进制文件。这导致我的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能够正常运行?

1 个答案:

答案 0 :(得分:0)

您可以通过将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/