docker + dotnet watch



我使用Visual studio Code。

我创建了一个新的项目dotnet new 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

这篇博文描述了当前的问题,以及如何解决这些问题:

http://www.natemcmaster.com/blog/2017/11/13/dotnet-watch-and-docker/

要汇总所需的更改,请执行以下操作:

使用版本 2.1.0-preview1-27567的 Microsoft.DotNet.Watcher.Tools

若要获取此预览版本,需要将 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 Code 使用的目录分开,否则您将遇到当前看到的问题。

为此,binobj 目录必须放置在项目目录之外一个相当奇怪的位置,这可以通过将一个名为 Directory.Build.props 的文件添加到项目目录中来实现:

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

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

最新更新