Použitím .NET Core 3.1 na vydanie jednosúborovej konzolovej aplikácie bežiacej na Linuxovom systéme je hlavná vec, ktorú programový kód robí, veľmi jednoduchá, tedaPrečítajte výstup konfiguračného súboru v programovom adresári! Avšak keď publikujete jeden súbor na spustenie na Linuxe, píše sa, že súbor nie je nájdený.
Testovací kód:
Výstup je nasledovný:
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/
Pri publikovaní .NET Core aplikácie ako jedného súboru, ktorý sa spúšťa na systéme CentOS, program sa sám rozbalí a uvoľní/var/tmp/.net/root/a potom zavolať program uvoľnený v adresári, čo tiež vysvetľuje, prečo program nemôže nájsť konfiguračný súbor.
riešenie
Použitím System.Environment.CurrentDirectory na čítanie cesty programu System.Environment.CurrentDirectory skutočne získava aktuálny adresár, ale ak program A volá program B a program B použije System.Environment.CurrentDirectory na získanie adresára. Potom adresár získaný v programe B už nie je adresár, kde sa aplikácia B nachádza; Stáva sa adresárom, kde sa nachádza A.
|