TFS2018 API:如何在BuildDefinition中存储自定义模板名称?
TFS2018 API中存储生成定义模板名称的可行方案
当然可以实现你的需求,而且有几种不同的方案适配不同场景,我来帮你梳理清楚:
一、用Tags属性实现的可行性
完全没问题!TFS的BuildDefinition对象自带的Tags集合(List<string>类型)就是专门用来存放自定义标记的。你可以直接把模板名称作为一个标签加进去,甚至加个前缀来区分其他标记:
var buildDefinition = new BuildDefinition(); // 带前缀,方便后续识别是模板名称 buildDefinition.Tags.Add("Template: MyCustomBuildTemplate"); // 或者直接存模板名,适合标记单一的场景 buildDefinition.Tags.Add("MyCustomBuildTemplate");
这种方式的好处是不用额外配置,直接利用现有属性,后续查询生成定义时能直接读取Tags集合拿到模板信息,简单高效。唯一要注意的是如果有其他业务标记,前缀能帮你快速过滤出模板相关的内容。
二、更推荐的结构化存储方案
如果之后可能需要存储更多模板相关的信息(比如版本、作者),或者希望自定义数据更清晰,这两个方案更合适:
1. CustomAttributes属性(优先推荐)
BuildDefinition的CustomAttributes是个JObject类型的属性,专门用来存储键值对形式的结构化自定义元数据,简直为你的需求量身定做:
var buildDefinition = new BuildDefinition(); // 明确存储模板名称 buildDefinition.CustomAttributes["TemplateName"] = "MyCustomBuildTemplate"; // 还能顺便存模板版本这类额外信息 buildDefinition.CustomAttributes["TemplateVersion"] = "1.0.0";
读取的时候也非常直接,不会像Tags那样需要解析:
string templateName = buildDefinition.CustomAttributes["TemplateName"]?.ToString();
这种方式扩展性极强,后续要加新的自定义字段也很方便,是TFS API推荐的自定义信息存储方式。
2. Description字段(简易场景备选)
如果你的需求很简单,而且生成定义的描述字段没有其他用途,也可以把模板名称放在这里:
buildDefinition.Description = "基于模板:MyCustomBuildTemplate 的生成定义";
优点是最直观,不用额外处理,但缺点是会占用描述字段,不适合需要详细说明生成定义用途的场景。
总结
- 简单存储模板名称:用
Tags属性,加前缀区分更稳妥; - 需要结构化/扩展存储:优先用
CustomAttributes,这是官方设计的自定义元数据存储位; - 临时/简易场景:可以考虑用Description字段,但不推荐长期使用。
内容的提问来源于stack exchange,提问作者doorman
相关产品推荐
相关产品推荐

