c# MSBuild Unhandled अपवाद: FileName गुण एक निर्देशिका नहीं होना चाहिए जब तक कि UseShellExecute सेट न हो




asp.net docker (8)

संस्करण

  • डॉटनेट कोर sdk: 2.1.403
  • docker: 18.09.7
  • लिनक्स कर्नेल: 5.0.0-27
  • उबंटू: 18.04.3

मुसीबत

मैं डॉक में एक ASP.NET कोर परियोजना चला रहा हूं। जब मैं डॉक-कंपोज़ करता हूं, तो मुझे निम्नलिखित मिलते हैं:

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)

त्रुटि तब होती है जब यह डॉटनेट dotnet restore लाइन को डॉकटराइल में हिट करता है।

अनुमतियों की जाँच करने के बाद, ऐसा लगता है कि docker ने सीधे शामिल सभी फ़ाइलों / फ़ोल्डरों के लिए अनुमतियाँ पढ़ / लिख ली हैं

आज सुबह कुछ अपडेट थे कि इस पोस्ट पर दूसरों ने कहा है कि उनके पास भी था। चाहे वे वही अपडेट अज्ञात थे। लेकिन कुछ अपडेट थे। यहाँ सुबह से मेरा अपडेट लॉग है कि यह सब होने लगा

मेरा डॉकफाइल ऐसा है:

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

समाधान


apt-add-repository -y ppa: teejee2008 / ppa
apt-get update
apt-get install ukuu
ukuu - स्थापना-नवीनतम
रिबूट
बेमिसाल -sr


मैं एक ही मुद्दे में भाग गया और 5.0.0-27-जेनेरिक से 5.0.0 तक लिनक्स कर्नेल को अपग्रेड कर रहा था। 25-जेनेरिक ने इसे तय किया।

लिनक्स कर्नेल को डाउनग्रेड करने का एक सरल तरीका पैकेज उकू का उपयोग करना है, जिसकी लाइसेंस लागत 12 $ है।

मुफ्त विकल्प here वर्णित here

एक और संभावना GRUB टाइमआउट को बढ़ाने और बूट सिस्टम में वांछित कर्नेल संस्करण को चुनने के लिए है जो कि हर सिस्टम पर मैन्युअल रूप से शुरू होता है, जो here वर्णित here


मैं ubuntu 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

फिर "उबंटू उन्नत विकल्प" का उपयोग करके पुनः आरंभ करें और फिर linux-generic_5.0.0.13.14 चुनें।



मैं कल से उसी समस्या से जूझ रहा था, लेकिन समस्या ubuntun से उपजी है, क्योंकि मैंने काली लाइनक्स से समस्याओं के बिना बनाया और काम किया है, लेकिन मैंने 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

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

सबसे सरल समाधान .Net Core 2.1 and 2.2 है, जो निचला 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)

हम अपने डॉकटर मेजबानों के रूप में Azure पर Ubuntu 18.04 चलाते हैं। Azure ने हाल ही में कर्नेल संस्करण 5.0.0-1018 को धकेल दिया है, जो हमारे लिनक्स कंटेनरों में समस्या का कारण बना। कर्नेल संस्करण में अपग्रेड करना 4.18.0-1025 ने हमारे लिए तय किया।


यहां भी यही समस्या। अद्यतन Ubuntu कर्नेल पिछले संस्करण (5.0.0-27-जेनेरिक) समस्या को हल करने के लिए।