Mit .NET Core 3.1 eine Einzeldatei-Konsolenanwendung auf einem Linux-System zu veröffentlichen, ist das Wesentliche, was der Programmcode tut, sehr einfach, nämlichLesen Sie die Ausgabe der Konfigurationsdatei im Programmverzeichnis! Wenn man jedoch eine einzelne Datei veröffentlicht, um sie auf Linux auszuführen, wird angezeigt, dass die Datei nicht gefunden wird.
Testcode:
Die Ausgabe ist wie folgt:
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/
Wenn eine .NET Core-Anwendung als einzelne Datei veröffentlicht wird, die auf einem CentOS-System ausgeführt wird, wird das Programm selbst entpackt und freigegeben/var/tmp/.net/root/und dann das im Verzeichnis freigegebene Programm aufrufen, was auch erklären kann, warum das Programm die Konfigurationsdatei nicht findet.
Lösung
Mit System.Environment.CurrentDirectory zum Lesen des Programmpfads erhält System.Environment.CurrentDirectory tatsächlich das aktuelle Verzeichnis, aber wenn Programm A Programm B aufruft, verwendet Programm B und Programm B System.Environment.CurrentDirectory, um das Verzeichnis zu erhalten. Dann ist das im B-Programm erhaltene Verzeichnis nicht mehr das Verzeichnis, in dem sich die B-Anwendung befindet; Es wird zum Verzeichnis, in dem sich A befindet.
|