Używając .NET Core 3.1 do wydania konsolowej aplikacji z pojedynczym plikiem, działającej na systemie Linux, główny aspekt kodu programu jest bardzo prosty, czyliOdczytaj plik konfiguracyjny wyjściowy w katalogu programu! Jednak gdy publikujesz pojedynczy plik do uruchomienia na Linuksie, pojawia się komunikat, że plik nie został znaleziony.
Kod testowy:
Wyniki są następujące:
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/
Podczas publikowania aplikacji .NET Core jako pojedynczego pliku, uruchamiając ją na systemie CentOS, program jest samorozpakowywany i wypuszczany/var/tmp/.net/root/a następnie wywołać program wydany w katalogu, co również tłumaczy, dlaczego program nie może znaleźć pliku konfiguracyjnego.
rozwiązanie
Korzystając z System.Environment.CurrentDirectory do odczytania ścieżki programu, System.Environment.CurrentDirectory rzeczywiście otrzymuje aktualny katalog, ale jeśli program A wywołuje program B, a program B używa System.Environment.CurrentDirectory do uzyskania katalogu. Wtedy katalog uzyskany w programie B nie jest już katalogiem, w którym znajduje się aplikacja B; Staje się on katalogiem, w którym znajduje się A.
|