我想使用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中的“灰色”区域吗?
答案 0 :(得分:2)
//我不知道为什么需要itemspec而不是item和version ...
ItemSpec包含RecursionType。如果你事先知道你将要标记文件夹的所有子项(1级或完全递归到所有子文件夹中),你可以使用ItemSpec来大大压缩LabelItemSpec []的大小。传递到&amp;来自服务器。
这是TFS API中的“灰色”区域吗?
不是灰色的,只是记录不清。标签在TFS中是一种事后的想法;他们在管理SDLC的“微软方式”中没有任何作用,所以你根本不会在指南中找到它们。据我所知,它们主要用于特征完整性(又称竞争分析)。它们对于几个复杂的一次性数据库操作也很方便,否则客户端API无法实现这些操作。
在MSDN文章下面的“社区内容”部分阅读Buck Hodges的解释 - 这是重要的部分。替换通常比人们想要的更接近Merge,但是如果你确定你正在创建一个全新的标签,那么它并不重要。