Как включить одновременную работу Visual Studio (windows) и Docker (linux-image) в одной папке? - PullRequest
0 голосов
/ 09 апреля 2019

У меня странная проблема:

Для проекта я создал Docker Build-Container (Linux-Image).

Если я собираю проект с помощью docker-образа, а VSработает (в той же папке), обе сборки потерпят неудачу, потому что из автоматически сгенерированных файлов будут зависеть от Windows или Linux (в основном о путях NuGet).

В проекте я установил некоторые флаги, но они у них не работали:

Строки 19 и 20:

https://github.com/d-velop/dvelop-app-template-cs/blob/master/NuGet.config#L19

Есть идеи, как остановить автоматическое построение VS?Или я могу разделить папки obj между Windows и Linux?Это также должно работать.

Для повседневного использования это не такая большая проблема, потому что мы запускаем образ докера на сервере сборки, но он также предназначен для использования в качестве примера для тестирования.

1 Ответ

2 голосов
/ 09 апреля 2019

Похоже, ваша проблема в том, что вы монтируете каталог проекта в виде тома, а затем разделяете его как между контейнерной средой Linux и локальной файловой системой Windows.Это путь к катастрофе.

Если вы добавите поддержку контейнера через Visual Studio, будет сгенерирован Dockerfile, подобный следующему.Это считается наилучшим практическим подходом для создания образов для проектов ASP.NET Core:

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/MyProject.csproj MyProject/
COPY MyProjectDependency/MyProjectDependency.csproj MyProjectDependency/
# etc.
RUN dotnet restore MyProject/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"]

Это многоступенчатая сборка (обозначается несколькими строками FROM).Все, кроме заключительного этапа, отбрасывается, поэтому его необходимо скопировать с предыдущих этапов (т. Е. COPY --from=publish /app .).Конечный результат такой же, как если бы вы просто скопировали уже опубликованное приложение в простое aspnetcore-runtime изображение (т.е. без дополнительного веса инструментов сборки, исходного кода, пакетов NuGet и т. Д.), Но проект полностью скомпилирован и опубликован какчасть изображения build.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...