c# - MSBuild 처리되지 않은 예외:UseShellExecute가 설정되어 있지 않으면 FileName 속성은 디렉터리가 아니어야합니다.




asp.net docker (6)

Docker 호스트로 Azure에서 Ubuntu 18.04를 실행합니다. Azure는 최근 커널 버전 5.0.0-1018을 발표하여 Linux 컨테이너에서 문제를 일으켰습니다. 커널 버전 4.18.0-1025로 다운 그레이드하면 해결되었습니다.

버전

  • 닷넷 코어 SDK : 2.1.403
  • 도커 : 18.09.7
  • 리눅스 커널 : 5.0.0-27
  • 우분투 : 18.04.3

문제

docker에서 ASP.NET Core 프로젝트를 실행 중입니다. 도커 작성을 구성하면 다음과 같은 결과가 나타납니다.

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)

dockerfile에서 dotnet dotnet restore 라인에 도달하면 오류가 발생하는 것 같습니다.

권한을 확인한 후 docker가 직접 관련된 모든 파일 / 폴더에 대한 읽기 / 쓰기 권한을 가지고있는 것 같습니다

오늘 아침에이 게시물의 다른 사용자들도 업데이트 한 내용이 있습니다. 동일한 업데이트인지 여부는 알 수 없습니다. 그러나 몇 가지 업데이트가있었습니다. 여기이 모든 것이 일어나기 시작한 아침부터의 업데이트 로그가 있습니다 .

내 Dockerfile은 다음과 같습니다.

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"]

같은 문제가 발생하여 Linux 커널 을 5.0.0-27-generic에서 5.0.0.-25-generic로 다운 그레이드 했습니다.

리눅스 커널을 다운 그레이드하는 간단한 방법은 라이센스 비용이 12 $ 인 Uku 패키지를 사용하는 것입니다.

무료 대안 here 에 설명되어 here .

또 다른 가능성은 GRUB Timeout 늘리고 수동으로 시작하는 모든 시스템의 부팅 메뉴에서 원하는 커널 버전을 선택하는 here 입니다.


솔루션


apt-add-repository -y ppa : teejee2008 / ppa
적절한 업데이트
apt-get 설치 ukuu
ukuu-설치-최신
재부팅
uname -sr


어제부터 같은 문제로 어려움을 겪었지만 칼리 리눅스에서 문제없이 만들고 일했기 때문에 문제는 우분투에서 비롯되었지만 18.04 및 19.04에서 시도했지만 오류가 계속 발생했습니다.

도커 버전

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

도커 파일

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"]

우분투 9.04에서도 같은 문제가있었습니다. linux-generic=5.0.0.13.14 다운 그레이드했으며 현재 작동 중입니다!

다음 명령을 실행하십시오.

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

그런 다음 "Ubuntu Advanced options"를 사용하여 다시 시작한 다음 linux-generic_5.0.0.13.14 옵션을 선택하십시오.