【问题标题】:Visual studio 2008 macro to get source codeVisual Studio 2008宏获取源代码
【发布时间】:2011-03-29 14:34:54
【问题描述】:

我有一个宏,它可以打开解决方案、连接到 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 是包含上述代码的宏的完整路径。

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 我不熟悉 Sourcesafe 脚本,我可以编写 SourceSafe 以获取最新版本,而不是所有代码,而是链接到具体 .sln 解决方案文件的代码?
    • 嗯,可能不是;它不理解文件的实际语义。我想知道如果您只发送键“Alt + F4”而不是发送“退出”,是否会改善崩溃。
    【解决方案2】:

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

    我正在使用以下宏:

    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 code命令之后的exit命令。

    【讨论】:

      猜你喜欢
      • 2013-01-31
      • 2012-04-09
      • 2010-11-08
      • 2016-04-26
      • 1970-01-01
      • 1970-01-01
      • 2020-07-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多