Χρησιμοποιώντας το .NET Core 3.1 για την κυκλοφορία μιας εφαρμογής κονσόλας ενός αρχείου, που εκτελείται σε σύστημα Linux, το κύριο πράγμα που κάνει ο κώδικας του προγράμματος είναι πολύ απλό, δηλαδήΔιαβάστε την έξοδο του αρχείου διαμόρφωσης στον κατάλογο του προγράμματος! Ωστόσο, όταν δημοσιεύετε ένα μόνο αρχείο για εκτέλεση σε Linux, λέει ότι το αρχείο δεν βρέθηκε.
Κωδικός δοκιμής:
Η έξοδος έχει ως εξής:
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/
Όταν δημοσιεύετε μια εφαρμογή .NET Core ως μεμονωμένο αρχείο, εκτελώντας την σε ένα σύστημα CentOS, το πρόγραμμα εξάγεται και κυκλοφορεί μόνο του/var/tmp/.net/root/και, στη συνέχεια, καλέστε το πρόγραμμα που κυκλοφόρησε στον κατάλογο, το οποίο μπορεί επίσης να εξηγήσει γιατί το πρόγραμμα δεν μπορεί να βρει το αρχείο διαμόρφωσης.
λύση
Χρησιμοποιώντας το System.Environment.CurrentDirectory για να διαβάσει τη διαδρομή του προγράμματος, το System.Environment.CurrentDirectory λαμβάνει πράγματι τον τρέχοντα κατάλογο, αλλά εάν το πρόγραμμα Α καλεί το πρόγραμμα Β και το πρόγραμμα Β χρησιμοποιεί το System.Environment.CurrentDirectory για να λάβει τον κατάλογο. Στη συνέχεια, ο κατάλογος που λαμβάνεται στο πρόγραμμα Β δεν είναι πλέον ο κατάλογος όπου βρίσκεται η εφαρμογή Β. Γίνεται ο κατάλογος όπου βρίσκεται το Α.
|