Використовуючи .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; Вона стає довідником, де розташована А.
|