Используя .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; Он становится справочником, где находится A.
|