Използвайки .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 наистина получава текущата директория, но ако програма A извика програма B, а програма B използва System.Environment.CurrentDirectory, за да получи директорията. Тогава директорията, получена в B програмата, вече не е директорията, в която се намира B приложението; Той става директорията, в която се намира А.
|