Как добраться в корневой каталог проекта asp.net ядро. Каталог.GetCurrentDirectory() не'т, кажется, правильно работать на Mac
Мой проект имеет структуру папок в размере:
- Проект
- Проект/сведения
- Проект/Двигатель
- Проект/Сервер
- проект/фронтальный
На сервере (в папке проекта/сервера) я отношу к папке такой:
var rootFolder = Directory.GetCurrentDirectory();
rootFolder = rootFolder.Substring(0,
rootFolder.IndexOf(@"\Project\", StringComparison.Ordinal) + @"\Project\".Length);
PathToData = Path.GetFullPath(Path.Combine(rootFolder, "Data"));
var Parser = Parser();
var d = new FileStream(Path.Combine(PathToData, $"{dataFileName}.txt"), FileMode.Open);
var fs = new StreamReader(d, Encoding.UTF8);
На моей машине Windows этот код работает нормально с каталога.GetCurrentDirectory()` сосланный в текущую папку, и делаю
rootFolder.Substring(0, rootFolder.IndexOf(@"\Project\", StringComparison.Ordinal) + @"\Project\".Length);
получает меня в корневой папке проекта (не bin или отладка папки). Но когда я запустил его на компьютере Mac, он получил и" Каталог.GetCurrentDirectory()`" и послал меня в /usr/<имя пользователя>/[что-то еще]. Это не'т указать папку, где лежит мой проект.
Как правильно найти относительные пути в мой проект? Где я должен хранить папки с данными таким образом, что оно легко доступно для всех подпроектов в растворе - специально для проекта пустельга сервер? Я предпочитаю не хранить его в папке wwwroot, потому что в папке data поддерживается другой член команды, и я просто хочу, чтобы получить доступ к последней версии. Какие у меня варианты?
В зависимости от того, где вы находитесь в трубопроводе пустельга - если у вас есть доступ к
IConfiguration
(автозагрузки.конструктор ЗС
) илиIHostingEnvironment
вы можете либо впрыснуть `IHostingEnvironment в конструкторе или просто попросите ключ от конфигурации.IHostingEnvironment вложил в стартап.конструктор ЗС`
в
Используя IConfiguration в автозагрузку.в CS конструктор
в
Работа на .Чистая ядра 2.2 и 3.0, как сейчас.
Чтобы получить корневой проекты каталог в контроллер:
частная чтения IHostingEnvironment _hostingEnvironment;
с помощью Microsoft.AspNetCore.Хостинг;
общественные HomeController(IHostingEnvironment hostingEnvironment) { _hostingEnvironment = hostingEnvironment; }
строки projectRootPath = _hostingEnvironment.ContentRootPath;
Чтобы попасть в "wwwroot в" по пути, используйте
Как уже ответил (и убирается). Чтобы получить база справочник, как в месте сборки, Дон'т использовать каталог.GetCurrentDirectory(), а получить его от IHostingEnvironment.ContentRootPath.
Однако я сделал еще ошибку: я поставил каталоге ContentRoot в каталог.GetCurrentDirectory() при запуске подрывает значение по умолчанию, которое я так хотел! Здесь я закомментировал ошибочную строку:
В некоторых случаях
_hostingEnvironment.И система ContentRootPath``.ИО.Каталог.GetCurrentDirectory()
целевых показателей к исходному каталогу. Вот это ошибка об этом.Решение, предложенное там мне помогли
Попробуйте посмотреть здесь: https://stackoverflow.com/questions/6041332/best-way-to-get-application-folder-path
Цитата оттуда:
Я решил проблему с этим кодом:
Если вы используете ASP.NET в MVC сердечник 3 или новее,
IHostingEnvironment
является устаревшим и замененIWebHostEnvironment
Реф: https://stackoverflow.com/a/55602187/932448