Tfs .仅当您的类具有ExpandableObjectConverter属性或从该类型派生的类时,参数编辑器才会显示其内容: public class SourceTargetSettingsConverter : ExpandableObjectConverter { public override bool CanConvertTo(ITypeDescriptorContext context, Type destinationType) { return destinationType == typeof(string) || base.CanConvertTo(context, destinationType); } public override object ConvertTo(ITypeDescriptorContext context, CultureInfo culture, object value, Type destinationType) { var parameters = (SourceTargetSettings) value; if (destinationType == typeof (string)) { return "This appears in the right column of the parameters editor."; } return base.ConvertTo(context, culture, value, destinationType); } }

Tfs .仅当您的类具有ExpandableObjectConverter属性或从该类型派生的类时,参数编辑器才会显示其内容: public class SourceTargetSettingsConverter : ExpandableObjectConverter { public override bool CanConvertTo(ITypeDescriptorContext context, Type destinationType) { return destinationType == typeof(string) || base.CanConvertTo(context, destinationType); } public override object ConvertTo(ITypeDescriptorContext context, CultureInfo culture, object value, Type destinationType) { var parameters = (SourceTargetSettings) value; if (destinationType == typeof (string)) { return "This appears in the right column of the parameters editor."; } return base.ConvertTo(context, culture, value, destinationType); } },tfs,msbuild,Tfs,Msbuild,将参数添加到流程。构建自定义程序集,在流程模板项目中添加对该程序集的引用,打开流程模板并添加新参数。在自定义参数类中键入它们并创建默认值: 添加参数元数据。正如Hinsh先生在回答中所说,我们仍然需要添加一个自定义组。在参数列表中查找元数据,然后打开编辑器。添加两个元数据项并参考流程参数: 上传。保存流程模板。签入自定义程序集和自定义流程模板。打开使用自定义模板的生成过程的生成过程编辑器,或重新打开它 感谢您的建议和详细步骤。直到第7步,我才得以实现。在我们的组织中,我们在生产中使用

将参数添加到流程。构建自定义程序集,在流程模板项目中添加对该程序集的引用,打开流程模板并添加新参数。在自定义参数类中键入它们并创建默认值:

  • 添加参数元数据。正如Hinsh先生在回答中所说,我们仍然需要添加一个自定义组。在参数列表中查找
    元数据
    ,然后打开编辑器。添加两个元数据项并参考流程参数:

  • 上传。保存流程模板。签入自定义程序集和自定义流程模板。打开使用自定义模板的生成过程的生成过程编辑器,或重新打开它


  • 感谢您的建议和详细步骤。直到第7步,我才得以实现。在我们的组织中,我们在生产中使用了负载平衡服务器,我想将自定义参数分组,如下所示,Web>server1。资料来源2。目标,然后是另一个子组>服务器2>1。资料来源2。如果需要更深层的层次结构,可以使用属性嵌套参数类。我的回答解决了你的问题吗?谢谢你的建议和详细步骤。直到第7步,我才得以实现。在我们的组织中,我们在生产中使用了负载平衡服务器,我想将自定义参数分组,如下所示,Web>server1。资料来源2。目标,然后是另一个子组>服务器2>1。资料来源2。如果需要更深层的层次结构,可以使用属性嵌套参数类。我的回答解决了你的问题吗?谢谢你的建议和详细步骤。直到第7步,我才得以实现。在我们的组织中,我们在生产中使用了负载平衡服务器,我想将自定义参数分组,如下所示,Web>server1。资料来源2。目标,然后是另一个子组>服务器2>1。资料来源2。如果需要更深层的层次结构,可以使用属性嵌套参数类。我的回答解决了你的问题吗?谢谢你的建议和详细步骤。直到第7步,我才得以实现。在我们的组织中,我们在生产中使用了负载平衡服务器,我想将自定义参数分组,如下所示,Web>server1。资料来源2。目标,然后是另一个子组>服务器2>1。资料来源2。如果需要更深层的层次结构,可以使用属性嵌套参数类。我的回答解决了你的问题吗?
    [BuildExtension(HostEnvironmentOption.All)]
    [Serializable]
    [TypeConverter(typeof(SourceTargetSettingsConverter))]
    public class SourceTargetSettings 
    {
        [DisplayName("1. Source")]
        [Description("Description for Source")]
        [Browsable(true)]
        public string Source { get; set; }
    
        [DisplayName("2. Target")]
        [Description("Description for Target")]
        [Browsable(true)]
        public string Target { get; set; }
    }
    
    public class SourceTargetSettingsConverter : ExpandableObjectConverter
    {
        public override bool CanConvertTo(ITypeDescriptorContext context, Type destinationType)
        {
            return destinationType == typeof(string) || base.CanConvertTo(context, destinationType);
        }
    
        public override object ConvertTo(ITypeDescriptorContext context, CultureInfo culture, object value, Type destinationType)
        {
            var parameters = (SourceTargetSettings) value;
            if (destinationType == typeof (string))
            {
                return "This appears in the right column of the parameters editor.";
            }
    
            return base.ConvertTo(context, culture, value, destinationType);
        }
    }