c# - Excepción no controlada de MSBuild: la propiedad FileName no debe ser un directorio a menos que se establezca UseShellExecute
asp.net docker (9)
Versiones
- dotnet core sdk: 2.1.403
- acoplador: 18.09.7
- Kernel de Linux: 5.0.0-27
- Ubuntu: 18.04.3
Problema
Estoy ejecutando un proyecto ASP.NET Core en Docker. Cuando docker-componer, obtengo lo siguiente:
Unhandled Exception: Microsoft.Build.BackEnd.NodeFailedToLaunchException: The FileName property should not be a directory unless UseShellExecute is set. ---> System.ComponentModel.Win32Exception: The FileName property should not be a directory unless UseShellExecute is set.
at System.Diagnostics.Process.StartCore(ProcessStartInfo startInfo)
at System.Diagnostics.Process.Start()
at System.Diagnostics.Process.Start(ProcessStartInfo startInfo)
at Microsoft.Build.BackEnd.NodeProviderOutOfProcBase.LaunchNode(String msbuildLocation, String commandLineArgs)
--- End of inner exception stack trace ---
at Microsoft.Build.CommandLine.MSBuildApp.BuildProject(String projectFile, String[] targets, String toolsVersion, Dictionary`2 globalProperties, Dictionary`2 restoreProperties, ILogger[] loggers, LoggerVerbosity verbosity, DistributedLoggerRecord[] distributedLoggerRecords, Int32 cpuCount, Boolean enableNodeReuse, TextWriter preprocessWriter, Boolean detailedSummary, ISet`1 warningsAsErrors, ISet`1 warningsAsMessages, Boolean enableRestore, ProfilerLogger profilerLogger, Boolean enableProfiler)
at Microsoft.Build.CommandLine.MSBuildApp.Execute(String[] commandLine)
at Microsoft.Build.CommandLine.MSBuildApp.Main(String[] args)
El error parece ocurrir cuando llega a la línea de
dotnet restore
de dotnet en el dockerfile.
Después de verificar los permisos, parece que Docker tiene permisos de lectura / escritura para todos los archivos / carpetas directamente involucrados
Hubo algunas actualizaciones esta mañana que otros en esta publicación han dicho que también tenían. Se desconoce si eran las mismas actualizaciones. Pero hubo un par de actualizaciones. Aquí está mi registro de actualización de la mañana en que todo comenzó a suceder .
Mi Dockerfile es así:
FROM microsoft/dotnet:2.1.403-sdk as dotnet
WORKDIR /vsdbg
RUN apt-get update /
&& apt-get install -y --no-install-recommends /
unzip /
&& rm -rf /var/lib/apt/lists/* /
&& curl -sSL https://aka.ms/getvsdbgsh | bash /dev/stdin -v latest -l /vsdbg
WORKDIR /ProjA
# Install TRX -> JUnit log file converter
# https://github.com/gfoidl/trx2junit
RUN dotnet tool install -g trx2junit
RUN export PATH="$PATH:/root/.dotnet/tools"
COPY ProjA.sln .
COPY ProjA/ProjA.csproj ./ProjA/
COPY ProjA.Tests/ProjA.Tests.csproj ./ProjA.Tests/
COPY ProjB/ProjB.csproj ./ProjB/
COPY ProjC/ProjC.csproj ./ProjC/
RUN mkdir ProjA.Tests/tmp
RUN dotnet restore # ******* Error seems to happen here...
COPY . .
WORKDIR /ProjA/ProjA/
CMD ["dotnet", "run"]
Ejecutamos Ubuntu 18.04 en Azure como nuestros hosts Docker. Azure recientemente lanzó la versión 5.0.0-1018 del núcleo, lo que causó el problema en nuestros contenedores de Linux. La degradación a la versión 4.18.0-1025 del kernel nos lo arregló.
El mismo problema aqui. Actualice el kernel de Ubuntu a la última versión (5.0.0-27-generic) para resolver el problema.
Este error ha sido confirmado en Ubuntu: bugs.launchpad.net/ubuntu/+source/linux/+bug/1843018
Problema relevante de .net Core: https://github.com/dotnet/corefx/issues/40850
He estado luchando con el mismo problema desde ayer, pero el problema proviene de ubuntun, porque creé y trabajé sin problemas de kali linux, pero seguí recibiendo errores a pesar de mis intentos en 18.04 y 19.04.
Versión Docker
Version: 19.03.2
API version: 1.40
Go version: go1.12.8
Git commit: 6a30dfc
Built: Thu Aug 29 05:29:11 2019
OS/Arch: linux/amd64
Experimental: false
Dockerfile
FROM microsoft/dotnet:2.1-sdk AS build
COPY . project/
WORKDIR /project
run dotnet restore dotnet.sln
FROM build AS publish
WORKDIR /Project/
RUN dotnet publish dotnet.sln -c Release -o /app
FROM microsoft/dotnet:2.1-aspnetcore-runtime AS runtime
COPY . Project/
WORKDIR /app
EXPOSE 8003
FROM runtime AS final
WORKDIR /app
COPY --from=publish /app .
ENTRYPOINT ["dotnet", "dotnet.dll"]
La
solución más simple
para
.Net Core 2.1 and 2.2
es usar una versión inferior de Ubuntu.
on: [push]
jobs:
build:
runs-on: ubuntu-16.04
steps:
- uses: actions/checkout@v1
- name: Build the Docker image
run: docker build . --file Dockerfile --tag yourtagname:$(date +%s)
Me encontré con el mismo problema hoy, con archivos Docker que funcionaban bien durante meses. Hubo algunos repositorios que funcionaron, pero otros simplemente no. Sin NINGÚN cambio. Los archivos Docker no se pudieron ejecutar y obtuvieron el mismo error "Excepción no controlada de MSBuild: la propiedad FileName no debe ser un directorio a menos que se establezca UseShellExecute". Originalmente estaba usando Docker 18.09.7 y actualicé a 19.3.2, pero eso no ayudó.
Estaba ejecutando Ubuntu 18.04.3 y noté algunas actualizaciones instalando en la mañana. Este es un sistema de compilación simple, con muy poco instalado (VS Code, Gitkraken, docker, docker-compose)
Como algunas de mis compilaciones fallaban y no pude encontrar un culpable, reinstalé y bajé a Ubuntu 18.04.2 y reinstalé las pocas cosas que necesito para compilar. Y todo volvía a funcionar. Sospecho que las actualizaciones de la mañana rompieron las cosas. Lamentablemente no guardé el registro de actualización :-(
Me encontré con el mismo problema y la corrección del núcleo de Linux de 5.0.0-27-generic a 5.0.0.-25-generic lo solucionó.
Una manera simple de degradar el kernel de Linux es usar el paquete Uku , cuya licencia cuesta 12 $.
La alternativa gratuita se describe here .
Otra posibilidad es aumentar el tiempo de espera de GRUB y elegir la versión de kernel deseada en el menú de inicio en cada inicio de sistema de forma manual, que se describe here .
Soluciones
apt-add-repository -y ppa: teejee2008 / ppa
apt-get update
apt-get install ukuu
ukuu --install-latest
reiniciar
uname -sr
Tuve el mismo problema en ubuntu 9.04.
Hice la degradación a
linux-generic=5.0.0.13.14
y está funcionando ahora.
Simplemente ejecute el siguiente comando:
sudo apt install linux-image-generic=5.0.0.13.14 linux-headers-generic=5.0.0.13.14 linux-generic=5.0.0.13.14
Luego reinicie usando "Opciones avanzadas de Ubuntu" y luego elija la opción
linux-generic_5.0.0.13.14
generic_5.0.0.13.14.