Как получить последнюю версию решения Visual Studio из командной строки? - PullRequest
9 голосов
/ 29 августа 2008

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

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

Ответы [ 7 ]

4 голосов
/ 09 октября 2008

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);
3 голосов
/ 23 июля 2010

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

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

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

2 голосов
/ 16 апреля 2012

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

Начало в главном каталоге 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

1 голос
/ 29 августа 2008

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

  1. В вашем пакетном файле введите tf get для каждой ветви каталога, которую вы хотите.

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

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

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

0 голосов
/ 14 октября 2009

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

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

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

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

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

0 голосов
/ 13 октября 2009

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

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

0 голосов
/ 09 сентября 2008

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

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

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

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