Я думаю, у вас есть несколько вариантов:
- Используйте переменные окружения, как вы уже предлагали. Для этого может потребоваться специальное задание, но его легко выполнить , без каких-либо дополнительных сборок с вашей стороны. Требуемая глобальная видимость может быть проблемой; Рассмотрим, например, параллельные сборки на машине CI.
- Напишите фрагмент кода во время сборки и включите его в полученную сборку (что-то похожее на то, что вы уже нашли под ссылкой , которую вы предложили в ваших комментариях.
- Записать файл (даже app.config) во время сборки, который содержит настройки, отражающие свойства MSBuild, которые вам необходимы; прочитайте их во время тестовых прогонов.
(Кстати, что не имеет большого смысла, так это попытаться снова прочитать файл проекта MSBuild во время выполнения (с использованием Microsoft.Build ). На этот раз это большая работа для начала Мало за что ИМХО.
И что еще важнее, вам, скорее всего, - в зависимости от сложности и зависимостей ваших свойств - необходимо убедиться, что вы вызываете библиотеки MSBuild с теми же свойствами, которые присутствовали во время фактической сборки. Возможно, это может вернуть вас обратно, если бы вы начали.)
Последние два варианта лучше всего подходят, потому что они имеют одинаковые черты: они ограничены только той сборкой / тестовым прогоном, который у вас есть в настоящее время (то есть вы можете иметь параллельные сборки без помех).
Я мог бы пойти на третий, потому что это, кажется, легче всего понять.
На самом деле я сделал это для более крупного проекта, над которым я работал. По сути, у нас были разные среды (строки подключения к базе данных и т. Д.), И мы выбирали те
в качестве шага посткомпиляции путем копирования myenv.config
в default.config
.
Тесты будут когда-либо только искать файл с именем default.config
и выбирать те параметры, которые там установлены.