3

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

4

2 回答 2

1

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

于 2011-03-29T14:38:54.180 回答
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 命令不会发生的事情直接在获取源代码命令之后。

于 2011-03-30T15:20:15.137 回答