Как получить текущий исполняемый каталог в Linux с .Net Core? - PullRequest
0 голосов
/ 15 февраля 2019

Мне нужно загрузить файл схемы XML, чтобы проверить некоторую информацию о API .Net Core 2.1, который находится на сервере Linux.К сожалению, у меня нет доступа к этому серверу (мы используем jenkins для развертывания, поэтому у меня 0 контактов с ним), поэтому я могу тестировать только на своем компьютере, который является Windows 10.
Я пробовал следующее:

System.AppContext.BaseDirectory
System.AppContext.BaseDirectory.Substring(0, AppContext.BaseDirectory.IndexOf("bin"));
AppDomain.CurrentDomain.BaseDirectory
Directory.GetCurrentDirectory()
GetType().Assembly.Location
System.Reflection.Assembly.GetExecutingAssembly().Location
System.Reflection.Assembly.GetExecutingAssembly().CodeBase

Все они возвращают текущее местоположение выполнения в Windows (т. Е. C:/SomePath/SomeProject/Name/api.dll), которое я могу использовать с Path.Combine для получения пути к файлу схемы.

Однако в linuxвсе они возвращают /home/app/, что не в том месте, где должна быть dll, согласно журналам Дженкинса.Это приводит к сбоям при загрузке файла схемы.Проект фактически находится в /services/projectname/.

Код теста:

var schema = new XmlSchemaSet { XmlResolver = new XmlUrlResolver() };
schema.Add(null, Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Schema/schema.xsd"));

Ожидается: в Windows и Linux это загружает файл схемы, используя путь выполнения DLL в качестве основы.

Факт: В Linux вместо правильного пути я получаю home/app.

Редактировать: я не могу жестко указать путь.Путь изменяется при каждом развертывании, так как имя проекта версионно.Это означает, что после того, как я разверну его, любое жестко закодированное значение будет неверным.Мне абсолютно необходим относительный путь.Помимо этого технического требования, жесткое кодирование является основным табу.Я никогда не пройду мимо проверки кода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...