在没有提示 TFS 命令行的情况下获取单个工作区

Posted

技术标签:

【中文标题】在没有提示 TFS 命令行的情况下获取单个工作区【英文标题】:Get single workspace without prompt TFS command line 【发布时间】:2017-10-31 15:12:56 【问题描述】:

我想要做的应该很简单——我想获取单个 TFS 工作区的信息(在这种情况下与计算机名称相同),并通过文本返回该信息——而不是通过提示窗口(据我了解,这就是 /noprompt 选项的用途)。我正在使用“workspace”命令,根据官方文档 (https://docs.microsoft.com/en-us/vsts/tfvc/workspace-command),这不是 100% 明确的。

注意:

我安装了 Visual Studio 2017 和 2015 的 tf.exe,以及 2015 Power Tools,但我更喜欢 2017 客户端。 我已阅读 TF Workspaces question,并将其视为其他内容 - 我特别想要有关单个工作区的信息(对于 PowerShell 脚本)。

【问题讨论】:

是什么让您认为它不受支持?你的确切问题是什么?除非您想直接从 PowerShell 使用 VersionControlServer 对象,否则应该使用 tf 中的 Workspace 命令或 Workspaces 命令。 我没说不支持;在文档中不清楚是否是这样。工作区或工作区命令没有给我我想要的,至少在我正在寻找的格式中(单个工作区的文本详细信息)。 您有指向 VersionControlServer 对象信息的链接吗?我想我没用过。 【参考方案1】:

tf.exe 的 /noprompt 选项不允许您查看详细信息。

它允许您创建一个新的工作区或编辑现有的工作区,而无需对话框。

【讨论】:

【参考方案2】:

您可以使用 tfs 客户端对象模型来查询本地工作空间。您可以通过工作站对象https://msdn.microsoft.com/en-us/library/microsoft.teamfoundation.versioncontrol.client.workstation(v=vs.120).aspx获取本地工作空间

您可以使用版本控制服务器对象来查询其他详细信息、获取文件、更改映射等https://msdn.microsoft.com/en-us/library/microsoft.teamfoundation.versioncontrol.client.versioncontrolserver(v=vs.120).aspx

这篇博客解释了如何加载正确的程序集,它引用了 12.0 对象模型,我建议改用最新的 nuget 包。 https://www.google.nl/amp/s/alistairbmackay.wordpress.com/2016/02/01/manipulating-tfs-with-powershell-part-1-connecting/amp/

最新的对象模型: https://www.nuget.org/packages/Microsoft.TeamFoundationServer.ExtendedClient/

【讨论】:

我还没有测试过,但是 Workstation.GetLocalWorkspaceInfo(string) 方法应该可以满足我的需求。您列出的博客文章我已经看过,但没有意识到 VersionControlServer 对象是我需要的。此外,它的程序集加载代码对我不起作用,我不知道为什么(从那时起我就知道了)。 您提到的 TFS ExtendedClient 与当前 Visual Studio (2017) 安装中包含的库/dll 之间有区别吗?另外,如果是要走的路,VS附带的NuGet包管理器控制台是“推荐”的方法吗?看起来还有其他几种方法可以通过命令行使用它——docs.microsoft.com/en-us/nuget/guides/install-nuget Nuget 自 2015 年起成为首选。不要依赖现有的 VS 安装或 GAC。并用你的脚本打包程序集,不要依赖包 mgmnt 控制台

以上是关于在没有提示 TFS 命令行的情况下获取单个工作区的主要内容,如果未能解决你的问题,请参考以下文章

更改计算机名称,影响TFS使用

更改机器名后,打开TFS提示工作区错误的处理

创建 TFS 工作区 - MinGW 兼容性问题

有没有办法在没有多个类的情况下更改单个工具提示工具提示的侧面/位置?

重命名计算机名称导致TFS版本管理下的工作区问题的修复

python argparse - 在没有命令行的情况下传递值