Tentative de création d'un conteneur avec microsoft / dotnet: 2.1-aspnetcore-runtime. Le fichier de solution de base .net contient plusieurs projets imbriqués sous la solution, chacun avec son propre fichier .csproj. Je tente de créer une instruction COPY plus élégante pour les sous-projets
L'exemple disponible ici https://github.com/dotnet/dotnet-docker/tree/master/samples/aspnetapp a un fichier de solution avec un seul .csproj crée ainsi le Dockerfile:
COPY *.sln .
COPY aspnetapp/*.csproj ./aspnetapp/
RUN dotnet restore
Cela fonctionne de cette façon
COPY my_solution_folder/*.sln .
COPY my_solution_folder/project/*.csproj my_solution_folder/
COPY my_solution_folder/subproject_one/*.csproj subproject_one/
COPY my_solution_folder/subproject_two/*.csproj subproject_two/
COPY my_solution_folder/subproject_three/*.csproj subproject_three/
pour une structure de dossiers de solution de:
my_solution_folder\my_solution.sln
my_solution_folder\project\my_solution.csproj
my_solution_folder\subproject_one\subproject_one.csproj
my_solution_folder\subproject_two\subproject_two.csproj
my_solution_folder\subproject_three\subproject_three.csproj
mais ce n'est pas le cas (c'était une supposition aléatoire)
COPY my_solution_folder/*/*.csproj working_dir_folder/*/
Existe-t-il une solution plus élégante?
Étant donné que les caractères génériques ne sont pas bien pris en charge par COPY ( moby issue 15858 ), vous pouvez:
Voici un exemple, à adapter dans votre cas:
find .. -name '*.csproj' -o -name 'Finomial.InternalServicesCore.sln' -o -name 'nuget.config' \
| sort | tar cf dotnet-restore.tar -T - 2> /dev/null
Avec un Dockerfile comprenant:
ADD docker/dotnet-restore.tar ./
L'idée est la suivante: l'archive est automatiquement étendue avec ADD
.
L' OPsturmstrike
mentionne dans les commentaires « Optimiser les applications ASP.NET Core dans Docker - éviter de copier manuellement des csproj
fichiers (Partie 2) » d' Andrew Lock «Sock»
La solution alternative utilise en fait la technique des caractères génériques que j'ai précédemment rejetée, mais avec quelques hypothèses sur la structure de votre projet, une approche en deux étapes et un peu de travail intelligent pour contourner les limitations des caractères génériques.
Nous prenons la liste plate des fichiers csproj et les replaçons à leur emplacement correct, imbriqués dans les sous-dossiers de src.
# Copy the main source project files
COPY src/*/*.csproj ./
RUN for file in $(ls *.csproj); do mkdir -p src/${file%.*}/ && mv $file src/${file%.*}/; done
L01nl suggère dans les commentaires une approche alternative qui ne nécessite pas de compression: " Optimiser les applications ASP.NET Core dans Docker - éviter de copier manuellement les fichiers csproj ", de Andrew Lock "Sock" .
FROM microsoft/aspnetcore-build:2.0.6-2.1.101 AS builder
WORKDIR /sln
COPY ./*.sln ./NuGet.config ./
# Copy the main source project files
COPY src/*/*.csproj ./
RUN for file in $(ls *.csproj); do mkdir -p src/${file%.*}/ && mv $file src/${file%.*}/; done
# Copy the test project files
COPY test/*/*.csproj ./
RUN for file in $(ls *.csproj); do mkdir -p test/${file%.*}/ && mv $file test/${file%.*}/; done
RUN dotnet restore
# Remainder of build process
Cette solution est beaucoup plus propre que mon effort précédent basé sur tar, car elle ne nécessite aucun script externe, juste un docker
COPY
et desRUN
commandes standard.
Il contourne le problème des caractères génériques en copiant d'abord lescsproj
fichiers dusrc
répertoire, en les déplaçant vers leur emplacement correct, puis en les copiant dans les fichiers du projet de test.
Cet article est collecté sur Internet, veuillez indiquer la source lors de la réimpression.
En cas d'infraction, veuillez [email protected] Supprimer.
laisse moi dire quelques mots