ASP.NET Ядро считывает файлы содержимого во время отладки

#c# #.net #asp.net-core

#c# #.net #asp.net-core

Вопрос:

У меня есть несколько файлов json, которые мне нужно прочитать из моего asp.net основное приложение. Они находятся в папке под названием data

 --MyProject
---Startup.cs
---Data
------dataset1.json
------dataset2.json
  

Я использую IHostingEnvironment ContentRootPath для чтения файлов:

  string pathToFile = hostingEnvironment.ContentRootPath
                              Path.DirectorySeparatorChar
                              "Data"
                              Path.DirectorySeparatorChar
                              "dataset1.json"
  

который возвращает C:SourceControlTest.BackendsrcTest.WebDatadataset1.json

Это отлично работает, когда я публикую свой код в IIS. Однако, когда я выполняю отладку, файлы копируются в папку bin, и приведенный выше код не работает. Как я могу читать файлы во время отладки?

Ответ №1:

 #if DEBUG

 string pathToFile = hostingEnvironment.ContentRootPath
                          Path.DirectorySeparatorChar
                          "bin"
                          Path.DirectorySeparatorChar
                          "Data"
                          Path.DirectorySeparatorChar
                          "dataset1.json"

#else

string pathToFile = hostingEnvironment.ContentRootPath
                          Path.DirectorySeparatorChar
                          "Data"
                          Path.DirectorySeparatorChar
                          "dataset1.json"

#endif
  

при таком подходе у вас могут быть два разных пути, когда вы находитесь в режиме отладки и в рабочей среде. Просто измените первый путь в соответствии с вашими потребностями

Комментарии:

1. Это то, что я имел в виду, но я хотел избежать этого решения с помощью переменных условной компиляции

2. Path.Combine метод является более стандартным и легким для объединения частей пути (и, вероятно, также немного более эффективным).