Как получить последнюю версию решения Visual Studio из командной строки?

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

tf get только рекурсивно получает содержимое папки (не решение). Он не смотрит на зависимости проекта и так далее. Это не сработает.


person Agnel Kurian    schedule 29.08.2008    source источник
comment
Узнали ли вы, какие именно файлы извлекаются средой IDE?   -  person Jon Limjap    schedule 01.09.2008
comment
Джон, в одном случае VS проверил файл проекта со следующим сообщением: «Похоже, существует несоответствие между информацией системы управления версиями решения о некоторых проектах и ​​информацией в файле (файлах) проекта».   -  person Agnel Kurian    schedule 13.10.2009


Ответы (7)


В TFS есть .Net SDK, который позволяет для создания собственных пользовательских программ, которые взаимодействуют с сервером TFS. Вы можете написать небольшую программу, которая выполняет нужную вам задачу:

TeamFoundationServer tfs = TeamFoundationServerFactory.GetServer("MyServer");
VersionControlServer vcs = (VersionControlServer)tfs.GetService(typeof(VersionControlServer));

WorkSpace[] myWorkSpaces = vcs.QueryWorkSpaces("MyWorkSpaceName", "MyLoginName", "MyComputer");

myWorkSpaces[0].Get(VersionSpec.Latest, GetOptions.GetAll);
person tbreffni    schedule 08.10.2008

Я согласен с тем, что обозреватель решений "по задумке" будет опускать все эти объекты, но только в том случае, если вы не включите их в качестве элементов решения, которые, я считаю, вы должны включать в свои решения, чтобы новичок мог открыть решение, выполните Get Latest и узнайте, что у них есть все зависимости, необходимые для этого решения, и им не нужно учиться делать это с помощью инструмента командной строки или использовать Source Control Explorer, если они этого не хотят.

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

Было бы хорошо, если бы вы могли связать целые деревья папок с папкой решения в решении VS.

person Mike Diehl    schedule 23.07.2010

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

Начните с основного каталога C:\Project\SupportingProjects

FOR /D %%G IN ("*") DO ECHO ..from....%%G && tf get C:\Projects\SupportingProjects\%%G 

::Get the latest for the Main project
tf get C:\Projects\MainProject /recursive 

В моем случае папка MainProject содержит файл решения и файл проекта.

Я нашел это легко и просто.

Подробнее о команде FOR: http://ss64.com/nt/for_d.html

person TheKnucklehead    schedule 16.04.2012

Что ж... Похоже, у вас есть три варианта.

  1. В вашем пакетном файле введите tf get в каждой нужной вам ветке каталога.

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

  3. Используйте визуальный способ, щелкнув правой кнопкой мыши загруженный проект и выполнив команду get.

Единственный раз, когда он действительно знает о решении, это когда проект загружается в IDE; или когда он загружается серверами сборки.

person NotMe    schedule 29.08.2008
comment
Крис, иногда я видел, как IDE автоматически извлекала файлы по причинам, которые я не мог понять. Я уверен, что tf.exe не будет обрабатывать эти вещи автоматически. Должны быть какие-то средства с помощью макроса или с помощью сценария msbuild... Я пытаюсь создать пакетный файл, который получает последнюю версию решения и создает его. Есть около 10 решений, которые мне нужно обновлять таким образом каждое утро... - person Agnel Kurian; 13.10.2009
comment
В качестве примечания: студия проверит файлы решения, если посчитает, что файл проекта был добавлен/изменен. Кроме того, он будет проверять файлы, связанные с тестами (например, .vsmdi), практически без всякой причины. Я не уверен, какое это имеет отношение к загрузке последней версии и ее сборке. - person NotMe; 14.10.2009

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

Я предполагаю, что вы используете версию TFS 2005 года. В 2008 есть все встроенные функции планирования.

Однако для делать запланированные сборки для вас. Я использовал как TFS 2008, так и CruiseControl, и они оба работают нормально.

person NotMe    schedule 09.09.2008

Еще одно возможное решение — использовать powershell. Следующая ссылка — это пример проекта кода, в котором показано, как получить решение из TFS и создать его локально. Powershell — гораздо лучшее решение, чем обычные пакетные файлы.

http://www.codeproject.com/KB/install/ExtractAndBuild.aspx

person NotMe    schedule 13.10.2009

Не делай этого. VS далеко не так умен, как вы думаете. (О чем свидетельствуют загадочные и бесполезные проверки, с которыми сталкивались все в течение 3+ циклов продукта, включая вас и меня. Это не признак надежной системы!)

То, что вы описываете, работает только для ссылок между проектами. Запуск операций управления исходным кодом из обозревателя решений «по задумке» пропускает:

  • ссылки проекта на сборку
  • видео, звук, PDF-файлы, любой другой тип мультимедиа, который VS не поддерживает, но может играть неотъемлемую роль в продукте.
  • MSBuild *.targets файлы, на которые есть ссылки в ваших проектах
  • любые файлы любого типа, на которые ссылаются пользовательские цели
  • любые сторонние исполняемые файлы, необходимые для процесса сборки
  • и т.д

Просто скажите нет неполной синхронизации. На этом пути лежат только головные боли.

Запустите «tf get» без области пути из командной строки или щелкните правой кнопкой мыши -> Получить из корневого узла $/ в проводнике управления версиями.

person Richard Berg    schedule 14.10.2009