Вы должны использовать положительный прогноз и взгляд сзади:
(?<=\[)([^\]]+)(?=\])
Лучший способ достичь того, что вы описываете в б), - использовать листы свойств. Также ознакомьтесь с этим очень похожим вопросом .
Я нашел многообещающую информацию о листы свойств, но Visual Studio не раскрывает макросы, когда я использую их в теге File в .vcproj.
Я не уверен, какую версию VS вы используете. VS2008 позволяет вам определить, например, каталог включаемых файлов следующим образом: «$ (OpenCVInclude) \ cxcore \ include». Я использую это все время. OpenCVInclude - это макрос, определенный на странице свойств.
Что касается вопроса а), я думаю, что не существует "чистого" способа делать то, что вы хотите. В качестве альтернативы вы можете использовать диспетчер конфигурации:
Я думаю, что у меня та же цель, что и у вас: я хочу использовать переменные среды для поиска некоторых проектов в файле решения (.sln) и использовать некоторые переменные среды для поиска некоторых файлов в моих проектах. - отредактируйте файл .sln с помощью текстового редактора и используйте переменные среды со следующим синтаксисом% MyEnvironmentVariable% - отредактируйте файлы .vcproj и замените путь к нужным файлам некоторыми переменными со следующим синтаксисом $ (MyEnvironmentVariable).
Надеюсь, это поможет ... Сирил
(а) Кирилл дает достойное решение того, о чем вы просили. Другой способ - хранить изменяемые настройки в одном месте. Обратите внимание, что это не будет работать для файлов, отличных от msbuild, таких как * .sln и * .vcproj (до VS 2010).
Файлы проекта: ... $ (ChangeableDir) \ foo.cs
Common.targets: ChangeThis ...
Однако я не думаю, что это лучший способ делать что-то. Если различия между тем, что вы создаете, представляют собой большие функциональные возможности, вам следует подумать о создании ветки в вашей системе управления версиями. OTOH, если различия незначительны - например, жестко запрограммированные строки - тогда это приводит к вашему второму вопросу ...
(b) Тип управления ресурсами, который вы описываете, по сути, представляет собой ту же проблему, с которой сталкиваются люди, локализующие свой проект на разные языки. К счастью, с 2005 года в Visual Studio встроена прямая поддержка. Ознакомьтесь с предыдущими вопросами, например: Локализация в Visual Studio 2008
Просто используйте переменную среды в соответствующем поле:
OutputDirectory="$(MyEnvVariableName)\Bin"
Уловка заключается в том, что вам нужно перезапускать среду разработки Visual Studio каждый раз, когда вы меняете переменную.
Есть статья MSDN именно об этом: Как: использовать переменные среды в сборке