Путь к папке проекта (bin) во время компиляции? - PullRequest
2 голосов
/ 07 апреля 2009

Есть ли способ узнать путь к проекту во время компиляции?

Я хочу создать модульный тест, который проверяет конфигурацию в файле по умолчанию web.config (тот, что находится в папке проекта). Главным образом, чтобы уменьшить человеческую ошибку.

Я не могу полагаться на места сборки во время выполнения (для теста), поэтому мне нужно знать, где находится папка проекта для доступа к web.config.

Мне нужно «универсальное» решение, поскольку я хотел бы использовать один и тот же (базовый) тестовый код для нескольких проектов, а физическое местоположение в любом случае разное для большинства машин разработки.

Спасибо.

Ответы [ 3 ]

8 голосов
/ 07 апреля 2009

На основании ответа РКБ,

Похоже, у вас есть проект на C #, используйте этот шаг пост сборки.

echo namespace ProjectPath { static public class ProjectPath { public static readonly string Path = @"$(ProjectDir)";} } > $(ProjectDir)path.cs

Затем включите path.cs как существующий элемент в ваш тестовый проект. Затем вы можете получить к нему доступ через:

string path = ProjectPath.ProjectPath.Path;
2 голосов
/ 07 апреля 2009

Если вам нужен путь к проекту Visual Studio, во время компиляции вы можете использовать событие предварительной сборки (см. Диалоговое окно «Свойства проекта») для запуска командной строки, которая создаст исходный файл, используемый в вашем проекте.

Исходный файл будет содержать некоторый код, скажем, определение переменной. Ваш тестовый код использует эту переменную. Значение переменной будет получено из VS; когда он запускает команду Pre-Build Event, он заменяет свойства проекта для определенных макросов. Макрос, который вы хотите, вероятно, ProjectDir.

Итак, в конце у вас есть что-то вроде этого для команды вашего события перед сборкой:

echo 'const char * PROJECT_PATH = "$(ProjectDir)";' > source.cpp

Не уверен, какой язык вы используете, поэтому настройте его соответствующим образом.

0 голосов
/ 22 февраля 2016

Чтобы немного улучшить решение, вместо использования командной строки события после сборки вы можете запустить команду как задачу MSbuild Exec в цели BeforeBuild проекта.

...