Как получить относительный корневой путь приложения, разрабатываемого в C # .NET MVC? - PullRequest
2 голосов
/ 21 сентября 2009

У меня есть несколько модульных тестов, которые требуют файлов из проекта для запуска модульных тестов. Эти файлы просто изображения. Мне нужно получить файл изображения, используя какую-то функцию в c #, кроме вставки полного пути, как показано ниже.

string filePath = @"C:\Users\user1\Documents\Visual Studio 2008\Projects\app1\app1.Tests\Fakes\test_files\test-image.jpg";

Я предпочту сделать что-то вроде:

string filePath = app.path + "\Fakes\test_files\test-images.jpg"

Как я могу это сделать?

Спасибо!

Ответы [ 3 ]

2 голосов
/ 21 сентября 2009

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

В Visual Studio можно установить свойство Копировать в выходной каталог любого файла проекта , чтобы оно помещало файл в выходную папку.

Copy to Output Directory screenshot


Поскольку звучит так, как будто вы хотите получить эти файлы в рамках своих модульных тестов, вам следует использовать что-то вроде атрибута MSTest [DeploymentItem]. Это поместит файлы в ваш тестовый каталог во время выполнения. Прочтите о Тестовом развертывании на MSDN .

0 голосов
/ 21 января 2011

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

Есть законные причины для получения корневого пути к веб-приложению ASP.NET, включая разновидность MVC. Например, мне это нужно, чтобы я мог передать «шаблон URI», который позднее XSL-преобразование использует для разрешения динамически обслуживаемого XML-документа (с использованием функции документа Xpath).

Для полного URI вы можете выполнить строковую операцию в this.Request.Url.AbsoluteUri из вашего контроллера / страницы.

Используйте this.Request.Path для пути к текущему или this.Request.ApplicationPAth для корневого пути приложения.

0 голосов
/ 21 сентября 2009

Просто чтобы прояснить, это не будет модульный тест. Юнит тест не должен опираться на окружающую среду. Все, что находится в базе данных, файловой системе и т. Д., Не должно использоваться. Модульный тест должен использоваться только для тестирования одного блока кода. Это связано с тем, что если кто-нибудь отключит источник и запустит модульные тесты (первое, что вы должны сделать после получения источника), он не запустится. Они должны настроить среду до того, как пройдут тесты. Они называются интеграционными тестами.

При этом вы можете установить переменную, если она находится только в одном классе, или app.config, если она присутствует в нескольких классах. Затем вы можете добавить путь в качестве пути по умолчанию и использовать его как «app.path».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...