使用TFS API将标签添加到文件的最佳方法是什么?

时间:2010-03-25 22:32:37

标签: tfs tfs2008

我想使用TFS API为一组文件添加标签。我的代码如下所示:

VersionControlLabel label = new VersionControlLabel(this.vcServer, this.label,
                this.vcServer.AuthenticatedUser, this.labelScopeDirectory, this.labelComment);

            List<LabelItemSpec> labelSpecs = new List<LabelItemSpec>();

            // iterate files and versions 
            foreach (var fileAndVersion in this.filesAndVersions)
            {
                VersionSpec vs = null;
                Item i = null;
                // i have no idea why the itemspec is needed instead of the item and version... 
                ItemSpec iSpec = new ItemSpec("{0}/{1}".FormatString(this.source, fileAndVersion.Key), RecursionType.None);
                GetItemAndVersionSpec(fileAndVersion.Key, fileAndVersion.Value, out vs, out i);
                labelSpecs.Add(new LabelItemSpec(iSpec, vs, false));
            }

            this.vcServer.CreateLabel(label, labelSpecs.ToArray(), LabelChildOption.Merge);

(那里有一些扩展方法......这一切都很大程度上取决于this blog post

关注我的事情是MSDN docs

中的这类事情
This enumeration supports the .NET Framework infrastructure 
and is not intended to be used directly from your code. 

所以MSDN告诉我不要使用枚举(LabelChildOption),这是创建标签并将其添加到文件的唯一方法。

有更好的方法吗?这是TFS API中的“灰色”区域吗?

1 个答案:

答案 0 :(得分:2)

  

//我不知道为什么需要itemspec而不是item和version ...

ItemSpec包含RecursionType。如果你事先知道你将要标记文件夹的所有子项(1级或完全递归到所有子文件夹中),你可以使用ItemSpec来大大压缩LabelItemSpec []的大小。传递到&amp;来自服务器。

  

这是TFS API中的“灰色”区域吗?

不是灰色的,只是记录不清。标签在TFS中是一种事后的想法;他们在管理SDLC的“微软方式”中没有任何作用,所以你根本不会在指南中找到它们。据我所知,它们主要用于特征完整性(又称竞争分析)。它们对于几个复杂的一次性数据库操作也很方便,否则客户端API无法实现这些操作。

在MSDN文章下面的“社区内容”部分阅读Buck Hodges的解释 - 这是重要的部分。替换通常比人们想要的更接近Merge,但是如果你确定你正在创建一个全新的标签,那么它并不重要。