Макрос Visual Studio 2008 для получения исходного кода - PullRequest
3 голосов
/ 29 марта 2011

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

Теперь я хочу выполнить devenv.exe с параметром / command, чтобы запустить этот макрос и закрыть среду Visual Studio после загрузки исходного кода, и в этот момент у меня возникают некоторые проблемы:

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

DTE.Solution.Open("C:\ApeironDev\Soluciones\SolucioApeiron\SolucioApeiron.sln")
DTE.Windows.Item(Constants.vsWindowKindSolutionExplorer).Activate()
DTE.ActiveWindow.Object.GetItem("SolucioApeiron").Select(vsUISelectionType.vsUISelectionTypeSelect)
DTE.ExecuteCommand("ClassViewContextMenus.ClassViewProject.ContextGetLatestVersion")
DTE.ExecuteCommand("File.Exit")

Если я добавлю строку в Sleep macro в течение некоторого времени, скажем, 20 минут, это завершится с ошибкой, связанной с ошибкой в ​​COM-вызове (я знаю, что это не элегантный способ выполнить работу, но для тестирования ...).

DTE.Solution.Open("C:\ApeironDev\Soluciones\SolucioApeiron\SolucioApeiron.sln")
DTE.Windows.Item(Constants.vsWindowKindSolutionExplorer).Activate()
DTE.ActiveWindow.Object.GetItem("SolucioApeiron").Select(vsUISelectionType.vsUISelectionTypeSelect)
DTE.ExecuteCommand("ClassViewContextMenus.ClassViewProject.ContextGetLatestVersion")
Threading.Thread.Sleep(New System.TimeSpan(0, 20, 0))
DTE.ExecuteCommand("File.Exit")

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

Уточнение, для запуска макроса я использую следующую командную строку:

devenv.exe /command "Macros.MyMacros.SourceControl.GetLastVersion"

Где Macros.MyMacros.SourceControl.GetLastVersion - полный путь к макросу, содержащему описанный выше код.

Ответы [ 2 ]

1 голос
/ 30 марта 2011

Учитывая тот факт, что я не нашел решение, которое искал, я наконец-то реализовал частичное решение.Разве это не то решение, которое я искал, ни - это самое элегантное решение , но оно работает, и поскольку это временное решение ... ну, лучше, чем ничего.

Я использую следующеемакрос:

Sub GestLastVersionOfSourceCode()
    DTE.Solution.Open("C:\ApeironDev\Soluciones\SolucioApeiron\SolucioApeiron.sln")
    DTE.Windows.Item(Constants.vsWindowKindSolutionExplorer).Activate()
    DTE.ActiveWindow.Object.GetItem("SolucioApeiron").Select(vsUISelectionType.vsUISelectionTypeSelect)
    DTE.ExecuteCommand("ClassViewContextMenus.ClassViewProject.ContextGetLatestVersion")

    'Wait for 2 minutes
    For i As Integer = 0 To 2
        Threading.Thread.Sleep(New System.TimeSpan(0, 1, 0))
    Next
    DTE.ExecuteCommand("File.Exit")
End Sub

Этот макрос выполняется без проблем и выдает весь исходный код перед закрытием среды.

По какой-то причине я не знаю, цикл между командами, которые получаютИсходный код и команда, которая закрывает решение, побуждают среду ждать завершения команды get source, чего не произойдет, если я добавлю команду выхода сразу после команды get source code.

1 голос
/ 29 марта 2011

1) почему бы не сам скрипт SourceSafe?Для него есть инструмент командной строки
2) если вам не нужно закрывать VS, вы можете изменить параметры управления исходным кодом на «Всегда получать последнюю версию решения при загрузке» и не использовать макрос

...