3

Как вы получаете путь к папке App_Data в методе Seed класса конфигурации первых миграций кода.Получить путь к папке App_Data в методе Seed класса конфигурации миграции EF

Я хочу прочитать из файла, который был помещен в папку App_Data, и метод Seed запускается после команды update-database. HttpContext.Current.Server.MapPath явно не работает, потому что в этот момент нет HttpContext.

ответ

0

Вот быстрый и грязный способ, чтобы вы начали:

var myPath = AppDomain.CurrentDomain.BaseDirectory; 
//to quickly show the path, either attach another debugger or just throw an exception 
throw new Exception(myPath); 
1

Я получил его на работу с чем-то вроде: string MyPath = AppDomain.CurrentDomain.BaseDirectory + "/../App_Data"

потому что AppDomain.CurrentDomain.BaseDirectory заканчивается в директории «/ Бен» ,

+0

Только в prod. В среде IDE при отладке «AppDomain.CurrentDomain.BaseDirectory» указывает на корень проекта. – ProfK

0

Для чего это стоит ... вам нужно заменить строку, если вы собираетесь использовать BaseDirectory в своем модульном тесте. Но у этой проблемы все еще есть проблема, что она использует путь вашего тестового проекта, так что вам надоело это, если вы пытаетесь указать файлы в другом проекте. В этом случае вам придется жестко закодировать путь.

AppDomain.CurrentDomain.BaseDirectory.Replace("\\bin\\Debug","") + "\\App_Data"; 
1

@Rusty Divine дал хороший ответ, тем не менее, может быть, вы найдете это будет лучше для вас:

System.IO.Path.Combine(System.Text.RegularExpressions.Regex.Replace(AppDomain.CurrentDomain.BaseDirectory, @"\\bin\\Debug$", String.Empty, System.Text.RegularExpressions.RegexOptions.IgnoreCase) , RELATIVE_PATH, "FILENAME.EXE"); 

Например:

System.IO.Path.Combine(System.Text.RegularExpressions.Regex.Replace(AppDomain.CurrentDomain.BaseDirectory, @"\\bin$", String.Empty, System.Text.RegularExpressions.RegexOptions.IgnoreCase) , "App_Data\\Init", "fileName.txt"); 

Таким образом (с помощью Regx) , мы гарантируем, что единственная замена может быть в суффиксе (в конце) строки AppDomain.CurrentDomain.BaseDirectory. Если на пути к серверу есть подпапки с именем: "\ bin \ Debug", они не будут заменены.

Это решение нечувствительно к регистру, что означает, что «\ BIN \ debug» также будет заменен.

Кроме того, вам не нужно добавлять строки в одну строку. System.IO.Path.Combine сделает это за вас.