我正在尝试为新的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能够正常运行?
答案 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/