docker+ dotnet手表

我使用Visual Studio代码。

我创build了一个新的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>

然后,我build立我的DockerFile。

我注意到奇怪的行为。 docker镜像检测到更改并重build解决scheme。 二进制文件已经在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:docker restore和docker watch run了

这个博客文章描述了当前的问题,但也是如何解决这个问题:

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中使用的binobj目录必须与Visual Studio代码中使用的binobj目录分开,否则您将遇到目前遇到的问题。

要做到这一点, binobj目录必须放置在项目目录以外的相当奇怪的位置,可以通过在项目目录中添加一个名为Directory.Build.props的文件来完成:

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

您还必须从项目目录中删除旧的binobj目录。