Visual Studio 2008宏获取源代码

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是包含上述代码的宏的完整路径。

2个回答

1

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


我不熟悉Sourcesafe脚本编写,我能否编写脚本以获取与具体.sln解决方案文件相关联的代码的最新版本,而不是所有代码的最新版本? - Doliveras
嗯,可能不行;它无法理解文件的实际语义。我想如果你发送“Alt + F4”键而不是发送“退出”,是否可以缓解崩溃。 - Mark Sowul

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

这个宏在不出问题的情况下运行,并在关闭环境之前提供所有源代码。

由于某些我不知道的原因,在获取源代码的命令和关闭解决方案的命令之间的循环会导致环境等待获取源命令结束,如果我直接在获取源代码命令之后放置退出命令,则不会发生这种情况。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接