Dieser Artikel ist ein Spiegelartikel der maschinellen Übersetzung, bitte klicken Sie hier, um zum Originalartikel zu springen.

Ansehen: 50975|Antwort: 0

[Quelle] .NET Core löst ein Problem mit einem einzelnen Dateipfad

[Link kopieren]
Veröffentlicht am 28.3.2021, 13:56:32 | | | |
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.

Die neuen .NET Core-Funktionen veröffentlichen eine einzelne ausführbare Datei
https://www.itsvse.com/thread-8273-1-1.html

Seien Sie vorsichtig bei System.Environment.CurrentDirectory, um das aktuelle Verzeichnis zu erhalten
https://www.itsvse.com/thread-9464-1-1.html
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.





Vorhergehend:.NET Core Linux-Fehler: Konnte kein gültiges ICU-Paket gefunden...
Nächster:.NET Core-Wassermarkierungsprobleme bei Linux-Bildern
Verzichtserklärung:
Alle von Code Farmer Network veröffentlichten Software, Programmiermaterialien oder Artikel dienen ausschließlich Lern- und Forschungszwecken; Die oben genannten Inhalte dürfen nicht für kommerzielle oder illegale Zwecke verwendet werden, andernfalls tragen die Nutzer alle Konsequenzen. Die Informationen auf dieser Seite stammen aus dem Internet, und Urheberrechtsstreitigkeiten haben nichts mit dieser Seite zu tun. Sie müssen die oben genannten Inhalte innerhalb von 24 Stunden nach dem Download vollständig von Ihrem Computer löschen. Wenn Ihnen das Programm gefällt, unterstützen Sie bitte echte Software, kaufen Sie die Registrierung und erhalten Sie bessere echte Dienstleistungen. Falls es eine Verletzung gibt, kontaktieren Sie uns bitte per E-Mail.

Mail To:help@itsvse.com