- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
大约一年前,我记得当我们想在 docker 中运行应用程序以进行开发时,我们使用 dotnet watch run
运行应用程序。但在最近的更新中,该模板正在创建一个发布版本并运行该版本。我同意这对生产有好处。但是为什么开发版就完全没有了呢?我搜索了很多但找不到为什么会发生这种变化。
像这样:
FROM microsoft/aspnetcore-build:2.0
# Required inside Docker, otherwise file-change events may not trigger
ENV DOTNET_USE_POLLING_FILE_WATCHER 1
# Set a working dir at least 2 deep. The output and intermediate output folders will be /code/obj and /code/bin
WORKDIR /code/app
# By copying these into the image when building it, we don't have to re-run restore everytime we launch a new container
COPY web.csproj .
COPY NuGet.config .
COPY Directory.Build.props .
RUN dotnet restore
# This will build and launch the server in a loop, restarting whenever a *.cs file changes
ENTRYPOINT dotnet watch run --no-restore
现在每次更改时,我们都需要发布应用程序以再次拥有一个工作的 docker。
我看到使用这种新方法在 visual studio 中调试工作正常,但我对 visual studio 如何能够附加到容器并进行远程调试感到困惑。更让我惊讶的是 visual studio 如何能够调试以 Release模式发布的应用程序?
但现在它看起来像这样:
FROM microsoft/dotnet:2.2-aspnetcore-runtime AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443
FROM microsoft/dotnet:2.2-sdk AS build
WORKDIR /src
COPY ["MyProject.csproj", "MyProject"]
COPY ["MyProject.Common.csproj", "MyProject.Common"]
RUN dotnet restore "MyProject.csproj"
COPY . .
WORKDIR "/src/MyProject"
RUN dotnet build "MyProject.csproj" -c Release -o /app
FROM build AS publish
RUN dotnet publish "MyProject.csproj" -c Release -o /app
FROM base AS final
WORKDIR /app
COPY --from=publish /app .
ENTRYPOINT ["dotnet", "MyProject.dll"]
最佳答案
声明明显但以防万一: dotnet watch 等待文件更改,然后重新编译,无需您手动重新启动。
仍然可以使用 dotnet watch,但在复制文件时在容器情况下没有任何优势。由于文件的复制发生在容器构建时,并将它们复制到镜像内的源位置,因此即使您使用 dotnet watch,对代码库的任何更改也不会在容器运行时反射(reflect)出来。
如果你想使用 dotnet watch,请考虑将源目录挂载为容器内的一个卷:)
您可以使用如下内容:
docker run --rm -it -p < port >:< port > -v ~/< sourcedirectory >:/< destination >/ -w /< destination >/aspnetapp mcr.microsoft.com/dotnet/core/sdk:3.0 dotnet watch run
如果不是很明显,-v 标志代表音量。如果您希望将卷添加到 Dockerfile,您可以阅读 Dockerfile & Volumes here .和 dotnet watch here .和 Docker volumes specifically here .最后我在我的历史记录中找到了 docker run command来自。
关于c# - 不再在 docker 中使用 dotnet watch 的理由是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56783758/
您好,我希望我的下一个输出(在本例中就是字母)在上一个输出之后输出 8 个空格。这适用于第一个字符,但之后的 printf 语句不起作用。它在第一个 printf 语句之后立即打印,我试图将其设置为
我想知道制作 std::list<>::splice 背后的基本原理是什么使引用被拼接到新容器中的子序列的迭代器无效。这对我来说有点不合逻辑,尤其是考虑到标准 std::container::swap
谁能告诉我为什么我应该使用 Azure Function 输出绑定(bind)(例如 SendGrid 或 Twilio)而不是仅仅在我的 C# 函数中显式使用适当的 SDK(例如 Sendgrid
我们在当前项目中使用 React 和 TypeScript,我遇到了以下行为。 import React, { Component } from 'react'; 我将上面的行替换为下面的行,因为它似
我是一名优秀的程序员,十分优秀!