【发布时间】:2021-07-22 23:04:57
【问题描述】:
我们有许多构建标志希望能够作为单个参数传递给我们的 Cake 脚本。基于this 答案和TypeConverter documentation,我希望以下简化代码能够编译和运行。
public class BuildFlagsConverter : TypeConverter
{
public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType)
{
return true;
}
public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value)
{
return BuildFlags.None;
}
}
[Flags]
[TypeConverter(typeof(BuildFlagsConverter))]
enum BuildFlags
{
None = 0,
FeatureOne = 1,
FeatureTwo = 2,
All = FeatureOne | FeatureTwo,
}
var buildFlags = Argument<BuildFlags>("buildFlags", BuildFlags.All);
然后我希望能够调用cake --buildFlags="FeatureOne|FeatureTwo" 来构建。相反,Cake 抛出以下错误:
错误:出现一个或多个错误。 (FeatureOne|FeatureTwo 不是 BuildFlags 的有效值。)
我认为这可能与使用枚举而不是类有关,因此我尝试将 BuildFlags 转换为具有上述每个值的静态 getter 的静态类。但是,在这种情况下,我仍然收到错误:
错误:出现一个或多个错误。 (TypeConverter 无法从 System.String 转换。)
我错过了什么吗?有一个更好的方法吗?理想情况下,我们仍然会在脚本本身中获得 enum 语法,但我想我愿意接受替代方案。
【问题讨论】: