Переменная Macros / Environment в файлах .sln и .vcproj для Visual studio - PullRequest
31 голосов
/ 08 мая 2009

У меня две похожие проблемы:

a) У меня есть решение, которое включает в себя несколько проектов, и я хочу иметь возможность легко переключать местоположение проекта, устанавливая некоторую переменную среды / макрос. Как пример, этот проект может быть расположен в \ SolutionDir \ Dir1 \ или \ SolutionDir \ Dir2 \ Итак, я хочу указать, что он должен находиться в \ SolutionDir \ $ (Var), и просто установить переменную.

Есть ли какая-либо сборка в Visual Studio, как это сделать?

В настоящее время я знаю только два решения - отредактируйте файл .sln вручную / программно, чтобы найти этот проект и установить правильный путь.

Мне не удалось использовать переменную окружения в файле .sln.

б) У меня есть проект, который включает файлы ресурсов (.rc и .h). Я хочу иметь возможность установить их местоположение с помощью другой переменной среды или макроса.

Что-то вроде \ ProjectDir \ $ (Var2) \ resource.rc

Я нашел многообещающую информацию на листах свойств, но Visual Studio не раскрывает макросы, когда я использую их в теге File в .vcproj.

Спасибо за любые идеи, как решить эту проблему.

С уважением, Victor

Ответы [ 5 ]

21 голосов
/ 14 июля 2009

Просто используйте переменную окружения в соответствующем поле:

OutputDirectory="$(MyEnvVariableName)\Bin"

Одна хитрость в том, что вам нужно перезапускать Visual Studio IDE каждый раз, когда вы меняете переменную.

Существует статья на MSDN именно об этом: Как: использовать переменные среды в сборке

19 голосов
/ 26 мая 2009

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

Я нашел способ сделать это, и он прекрасно работает для меня (с Visual Studio 2005): - отредактируйте файл .sln с помощью текстового редактора и используйте переменные среды со следующим синтаксисом% MyEnvironmentVariable% - отредактируйте файлы .vcproj и замените путь к нужным файлам некоторыми переменными со следующим синтаксисом $ (MyEnvironmentVariable).

Надеюсь, это поможет ... Сирил

2 голосов
/ 26 мая 2009

Лучший способ добиться того, что вы описываете в пункте б) - это использовать списки свойств Проверьте также этот очень аналогичный вопрос .

Я нашел многообещающую информацию о листы собственности, но визуальная студия не расширяет макросы при использовании их в теге файла в .vcproj.

Я не уверен, какую версию VS вы используете. VS2008 позволяет вам определить, например, каталог включения, например: "$ (OpenCVInclude) \ cxcore \ include". Я пользуюсь этим все время. OpenCVInclude - это макрос, определенный в листе свойств.

Что касается вопроса а), я думаю, что нет "чистого" способа сделать то, что вы хотите. В качестве альтернативы вы можете использовать диспетчер конфигурации:

  • Включите все проекты в решение.
  • Назовите проект по-другому, например, на основе OEM.
  • Для каждого проекта определите конфигурации выпуска и отладки в решении
  • В «Build-> Configuration Manager» Вы можете установить или снять флажок «Build» для каждой конфигурации. Проверьте «build» для соответствующего проекта.
1 голос
/ 28 января 2014

Я не уверен, что вы создаете только проекты на C ++ или же вы создаете проекты на C # \ VB, но одна из замечательных особенностей Visual Studio - все проекты на самом деле являются просто проектами MSBuild. Если вы отредактируете проект в текстовом редакторе, то увидите, что в конце проекта он импортирует файл .targets. Если вы отследите и обнаружите, что следите за импортом, вы обнаружите, что почти все проекты VS импортируют Microsoft.Common.Targets. Microsoft.Common.Targets импортирует Custom.Before.Microsoft.Common.Targets. Используя этот импорт, вы можете импортировать ваш собственный файл целей с вашими собственными действиями.

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

Используя этот метод расширения и создавая пользовательские конфигурации в решении, помимо стандартного выпуска \ отладки, вы сможете создавать настолько сложные конфигурации сборки, сколько вам нужно.

0 голосов
/ 07 июня 2009

(а) Сирил дает достойное решение того, что вы просили. Другой способ - сохранить ваши изменяемые настройки в одном месте. Обратите внимание, что это не будет работать для файлов, отличных от msbuild, таких как * .sln и * .vcproj (до VS 2010).

Файлы проекта: ... $ (ChangeableDir) \ foo.cs

Common.targets: ChangeThis ...

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

(б) Тип управления ресурсами, который вы описываете, по сути является той же проблемой, с которой сталкиваются люди, переводящие свои проекты на разные языки. К счастью, прямая поддержка встроена в Visual Studio с 2005 года. Ознакомьтесь с предыдущими вопросами, такими как: Локализация в Visual Studio 2008

...