C# 带有DateTime参数的.NET标准程序集属性 背景

C# 带有DateTime参数的.NET标准程序集属性 背景,c#,.net,validation,custom-attributes,.net-standard,C#,.net,Validation,Custom Attributes,.net Standard,我正在尝试实现一个自定义属性,该属性可以应用于.NET程序集,以指示到期日期(在此日期之后,开发人员不支持使用已分发用于测试的预发布版本)。它必须用.NET标准(2.0)编写 我知道我不能将DateTime作为参数传入,所以我传入了一个符合(YYYY-MM-DD)的字符串,然后使用转换为DateTime 到目前为止,我得到的属性如下: [AttributeUsage(AttributeTargets.Assembly, Inherited = false, AllowMultiple = fal

我正在尝试实现一个自定义属性,该属性可以应用于.NET程序集,以指示到期日期(在此日期之后,开发人员不支持使用已分发用于测试的预发布版本)。它必须用.NET标准(2.0)编写

我知道我不能将
DateTime
作为参数传入,所以我传入了一个符合(YYYY-MM-DD)的字符串,然后使用转换为
DateTime

到目前为止,我得到的属性如下:

[AttributeUsage(AttributeTargets.Assembly, Inherited = false, AllowMultiple = false)]
public sealed class UnstableReleaseExpiryAttribute : Attribute
{
    public UnstableReleaseExpiryAttribute(string expiryDate)
    {
        ExpiryDate = expiryDate;
    }
    public DateTime Expiry
    {
        get
        {
            if (ExpiryDate != null && DateTime.TryParse(ExpiryDate, out DateTime expiry))
                return expiry;

            return DateTime.MaxValue;
        }
    }
    public string ExpiryDate { get; }
}
我打算这样使用它:

[assembly: UnstableReleaseExpiry("2018-05-24")]
问题:
有没有一种方法可以使用(比如)正则表达式验证字符串输入,并在日期实际上不可解析时停止对其进行编译?我环顾四周,认为从继承是实现这一点的方法,但在.NET标准2.0中似乎不可用。还有其他方法吗?

没有。目前没有
ValidationAttribute
只是关于字段/属性格式的“注释”。其他C#代码必须激活它

  • 您可以创建一个代码分析规则来检查这一点
  • 类似问题:。您可以使用
    Fody
    而不是
    PostSharp
  • 我使用过的简单解决方案(因为处理编译后的步骤是一件痛苦的事情,代码分析器可能会被禁用):如果您有一个单元测试项目,请进行一个使用反射的测试,以查找属性的所有用法并检查它