Ved at bruge .NET Core 3.1 til at udgive en enkeltfil konsolapplikation, der kører på et Linux-system, er det vigtigste programkoden gør meget simpelt, nemligLæs konfigurationsfilens output i programmappen! Men når du udgiver en enkelt fil til at køre på Linux, står der, at filen ikke findes.
Testkode:
Outputtet er som følger:
AppDomain.CurrentDomain.SetupInformation.ApplicationBase:/var/tmp/.net/root/ImageWatermark/e5snojro.qyv/
Environment.CurrentDirectory:/root/test
AppDomain.CurrentDomain.BaseDirectory:/var/tmp/.net/root/ImageWatermark/e5snojro.qyv/
Når man udgiver en .NET Core-applikation som en enkelt fil, der kører den på et CentOS-system, udpakkes og udgives programmet selv/var/tmp/.net/root/og derefter kalder programmet, der er frigivet i kataloget, hvilket også kan forklare, hvorfor programmet ikke kan finde konfigurationsfilen.
opløsning
Ved at bruge System.Environment.CurrentDirectory til at læse programstien, får System.Environment.CurrentDirectory faktisk den aktuelle mappe, men hvis program A kalder program B og program B bruger System.Environment.CurrentDirectory til at hente kataloget. Så er den mappe, der opnås i B-programmet, ikke længere den mappe, hvor B-applikationen er placeret; Det bliver det register, hvor A er placeret.
|