Visual Studio 2008宏获取源代码

时间:2011-03-29 14:34:54

标签: visual-studio visual-studio-2008 visual-studio-macros

我有一个打开解决方案的宏,连接到SourceSafe并在解决方案中下载每个文件的最新版本。到目前为止,一切正常。

现在我想用/ command选项执行devenv.exe来运行这个宏,并在下载源代码后关闭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")

如果我添加一行来睡眠宏一段时间,比如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 个答案:

答案 0 :(得分:1)

1)为什么不编写SourceSafe脚本?它有一个命令行工具
2)如果您不需要关闭VS,您可以将源控制选项更改为“始终在加载时获得最新版本的解决方案”而不需要宏

答案 1 :(得分:1)

鉴于我没有找到我想要的解决方案,我终于实现了部分解决方案。不是我正在寻找的解决方案,也不是是最优雅的解决方案,但是有效,因为这是一个时间解决方案......总比没有好。

我正在使用以下宏:

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命令结束,如果我放入的话就不会发生这种情况在获取源代码命令之后直接执行exit命令。