AVollane
@AVollane
Начинающий C# разработчик

Как получить путь к файлу, чтобы всё работало и при разработке и при развёртывании?

Здравствуйте. Пишу в учебных целях небольшое веб-приложение. Я создал отдельный слой для работы с данными, являющийся библиотекой. На момент разработки структура папок следующая:
60a8e8dcc8cde136451333.png
В папке с конфигурацией хранится следующий файл JSON, его код будет десериализовываться в объект типа DatabaseConfiguration, чтобы потом удобно извлекать нужные данные:
60a8e9f6683f4893058487.png

Я столкнулся с одной проблемой. Мне нужно получать путь к этому файлу независимо от машины и от того, развёрнуто приложение или нет. Environment.CurrentDirectory выдаёт путь к исполняемому файлу, Directory.GetCurrentDirectory() выдаёт также путь к исполняемому файлу. Но мне то нужен как бы главный каталог приложения, где и находятся папки с конфигурацией, контекстами данных, моделями и прочим. Помогите. Расскажите, как его получить.
Заранее спасибо.
P.S. Если у вас есть предложения, как можно было бы улучшить систему конфигурации в слое данных, то рассказывайте.
  • Вопрос задан
  • 1350 просмотров
Решения вопроса 2
@d-stream
Готовые решения - не подаю, но...
Почему бы и не плясать именно от расположения исполняемого файла?
Например ..\..\config

p.s. Только Environment.CurrentDirectory - штука несколько зыбкая, лучше Assembly.GetExecutingAssembly().Location
Ответ написан
vabka
@vabka Куратор тега .NET
Токсичный шарпист
Нормальная практика работы с конфигами в aspnet core:
1. Никаких конфигов в библиотеках. Классы, которые нужно конфигурировать, должны принимать некоторые типизированные параметры в конструкторе.
2. В ConfigureServices читаешь IConfiguration и прокидываешь из него параметры в библиотечный класс
3. Конфигурируемые значения хранишь в appsettings.json/переменных среды/etc в проекте веб-приложения.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
firedragon
@firedragon
Не джун-мидл-сеньор, а трус-балбес-бывалый.
Используйте system.io.directory для получения пути к директории из полного пути. Да и в общем случае используйте appconfig.json и секции в нем.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы