Я пишу unit test для функции загрузки файлов моего веб-приложения. Я издевался над тестовым файлом и сохранял его в подкаталоге "Файлы тестов" каталога, в котором находился мой тестовый проект.
Поскольку я не хочу жестко закодировать путь к файлу. Как узнать каталог моего проекта по коду? Я использовал @ "..\Test files\test1.xml", но он не работает.
Спасибо заранее!
Помните, что ваш проект unit test будет работать относительно его собственного каталога bin, а не из каталога проекта. Вы можете получить путь к этому каталогу bin, используя:
Assembly.GetExecutingAssembly().Location
Однако проще всего установить файлы тестовых файлов и папок в каталог вывода. Просто нажмите на свой файл в проводнике решений, нажмите F4 и измените "Копировать в каталог вывода" на "Копировать всегда" или "Копировать, если новый". Структура папки также будет автоматически скопирована. Затем ваши инструкции относительного пути будут работать правильно.
Еще один способ:
int ix = Application.StartupPath.LastIndexOf(Application.ProductName);
string s = Application.StartupPath.Remove(ix + Application.ProductName.Length + 1);
edit: после того, как я опубликовал его, я увидел, что вопрос касается веб-приложений, а мое решение - для Windows Forms.
Я верю HttpContext.Current.Request.PhysicalApplicationPath предоставит вам физический каталог вашего корня приложения.
Я бы сохранил имя подкаталога в файле web.config, а затем использовал System.IO.Path.Combine(HttpContext.Current.Request.PhysicalApplicationPath) для создания полного пути к подкаталогу.