我使用Visual Studio Code。
我创建了一个新的projet dotnet新webapi。我在.csproj中引用了dotnet-watch:
<ItemGroup>
<DotNetCliToolReference Include="Microsoft.DotNet.Watcher.Tools" Version="2.0.0" />
<DotNetCliToolReference Include="Microsoft.Extensions.SecretManager.Tools" Version="2.0.0" />
<DotNetCliToolReference Include="Microsoft.Extensions.Caching.SqlConfig.Tools" Version="2.0.0" />
</ItemGroup>
然后,我构建我的DockerFile。
我注意到奇怪的行为。 docker镜像检测到更改并重建解决方案。二进制文件已在bin和obj目录中更新,但是当我调用api时,就好像从未有过任何更改。
FROM microsoft/aspnetcore-build:2.0
COPY . /app
WORKDIR /app
ENV ASPNETCORE_URLS=http://*:5000
EXPOSE 5000
ENV DOTNET_USE_POLLING_FILE_WATCHER=1
ENV ASPNETCORE_ENVIRONMENT=Development
Docker命令:docker run -i -p 5000:5000 -v $(pwd):/ app -t docker-todoapi
终于在集装箱码头:docker restore和docker Watch run
答案 0 :(得分:0)
此博客文章介绍了当前的问题,以及如何解决问题:
http://www.natemcmaster.com/blog/2017/11/13/dotnet-watch-and-docker/
总结您需要的更改:
使用 Microsoft.DotNet.Watcher.Tools 的版本 2.1.0-preview1-27567 。
要获得此预览版本,您需要将NuGet.config文件添加到项目目录中:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<packageSources>
<add key="aspnetcore-nightly" value="https://dotnet.myget.org/F/aspnetcore-dev/api/v3/index.json" />
<add key="NuGet" value="https://api.nuget.org/v3/index.json" />
</packageSources>
</configuration>
Docker中使用的bin
和obj
目录必须与Visual Studio Code使用的目录分开,否则您将遇到目前遇到的问题。
要执行此操作,bin
和obj
目录必须放在项目目录之外的一个相当奇怪的位置,这可以通过向项目添加名为Directory.Build.props
的文件来实现。目录:
<Project>
<PropertyGroup>
<BaseIntermediateOutputPath>$(MSBuildProjectDirectory)/../obj/</BaseIntermediateOutputPath>
<BaseOutputPath>$(MSBuildProjectDirectory)/../bin/</BaseOutputPath>
</PropertyGroup>
</Project>
您还必须从项目目录中删除旧的bin
和obj
目录。