Visual Studio (C #) Build Выходной путь с использованием переменных среды - PullRequest
35 голосов
/ 01 апреля 2011

Возможно ли использовать переменные среды в выходном пути сборки в VS 2008 (и др.) / Я пытаюсь найти решение, когда несколько разработчиков в моей команде используют как Windows XP и 7, так и все с разными входами в Windows, все ли могут изменять проекты и общих ссылочных библиотек DLL (источник хранится в Source Safe) и не путать относительные пути? Я пробовал такие вещи, как% userprofile% и $ (userprofile).

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

(Аналогичный вопрос без ответа на Выходной путь для сборки в Visual Studio 2010 )

Ответы [ 5 ]

37 голосов
/ 04 апреля 2011

Вам необходимо открыть файл csproj в текстовом редакторе и вручную ввести переменные среды в разделе OutputPath. Visual Studio экранирует '$', '(' и ')' при попытке сделать это из IDE.

2 голосов
/ 02 апреля 2011

Я использовал команду subst , чтобы выполнить подобные вещи в прошлом.По сути, все ссылки на проекты определяют пути относительно известной буквы диска, такой как R:\MyProject\outputs.

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

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

1 голос
/ 02 апреля 2011

Если вы не возражаете против дополнительных копий, вы можете добавить событие после сборки, которое копирует выходные данные проекта в общепринятое местоположение для общих библиотек, и каждый использует не относительную ссылку на это местоположение.Тем не менее, это все равно потребует стандартизации этого целевого местоположения, поэтому, возможно, это не то, что вы ищете.(пример ниже позволит обеспечить независимость от буквы диска как минимум)

copy $ (TargetPath) \ dependencies

1 голос
/ 01 апреля 2011

PaulTee, Это длинная просьба попробовать репликацию каталогов? Как Dropbox / Synctoy и другие инструменты, которые вызывают файл-копию из выбранного местоположения в ожидаемую общую папку?

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

0 голосов
/ 02 апреля 2011

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

http://en.wikipedia.org/wiki/NTFS_symbolic_link

ghost edit - mklink, по-видимому, является новым в 7, но более старые версии все еще поддерживают его (снова на помощь Руссиновичу):

http://technet.microsoft.com/en-us/sysinternals/bb896768

...