примерно год назад, я помню, когда мы хотим запустить приложение в докере для целей разработки, мы запускаем приложение с 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
Теперь при каждом изменении нам нужно опубликовать приложение, чтобы снова иметь работающий докер.
Я видел, что отладка прекрасно работает в Visual Studio с этим новым подходом, но я не совсем понимаю, как Visual Studio может подключаться к контейнеру и выполнять удаленную отладку.и еще больше меня удивляет, как Visual Studio может отлаживать приложение, опубликованное в режиме выпуска?
но теперь это выглядит так:
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"]