C# 带有DateTime参数的.NET标准程序集属性 背景
我正在尝试实现一个自定义属性,该属性可以应用于.NET程序集,以指示到期日期(在此日期之后,开发人员不支持使用已分发用于测试的预发布版本)。它必须用.NET标准(2.0)编写 我知道我不能将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
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
- 我使用过的简单解决方案(因为处理编译后的步骤是一件痛苦的事情,代码分析器可能会被禁用):如果您有一个单元测试项目,请进行一个使用反射的测试,以查找属性的所有用法并检查它