c# - Excepción no controlada de MSBuild: la propiedad FileName no debe ser un directorio a menos que se establezca UseShellExecute




asp.net docker (6)

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.


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/[email protected]
    - name: Build the Docker image
      run: docker build . --file Dockerfile --tag yourtagname:$(date +%s)

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