Izmantojot .NET Core 3.1, lai izlaistu viena faila konsoles lietojumprogrammu, kas darbojas Linux sistēmā, galvenais, ko programmas kods dara, ir ļoti vienkāršs, tas ir:Lasiet konfigurācijas faila izvadi programmas direktorijā! Tomēr, publicējot vienu failu, lai to palaistu operētājsistēmā Linux, tiek teikts, ka fails nav atrasts.
Testa kods:
Rezultāts ir šāds:
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/
Publicējot .NET Core lietojumprogrammu kā vienu failu, palaižot to CentOS sistēmā, programma tiek pašiegūta un izlaista/var/tmp/.net/root/direktoriju un pēc tam izsauciet direktorijā izlaisto programmu, kas var arī izskaidrot, kāpēc programma nevar atrast konfigurācijas failu.
šķīdums
Izmantojot System.Environment.CurrentDirectory, lai lasītu programmas ceļu, System.Environment.CurrentDirectory patiešām iegūst pašreizējo direktoriju, bet, ja programma A izsauc programmu B un programma B izmanto System.Environment.CurrentDirectory, lai iegūtu direktoriju. Tad B programmā iegūtais direktorijs vairs nav direktorijs, kurā atrodas B lietojumprogramma; Tas kļūst par direktoriju, kurā atrodas A.
|