PostSharp gives MissingMethodException

本文关键字:MissingMethodException gives PostSharp | 更新日期: 2023-09-27 18:36:26

我已经为PostSharp开发了一个自定义方面,它曾经工作正常,但现在我已经更新了我的项目以使用最新的PostSharp NuGet。方面如下:

[HasConstraint]
public sealed class NotDefaultAttribute : LocationContractAttribute, ILocationValidationAspect<ValueType>, ILocationValidationAspect, IAspect
{
    public NotDefaultAttribute()
    {
        ErrorMessage = "The {2} cannot be empty.";
    }
    public Exception ValidateValue(ValueType value, string locationName, LocationKind locationKind)
    {
        if (value == null)
            return null;
        var type = value.GetType();
        if (type.IsGenericType && type.GetGenericTypeDefinition() == typeof(Nullable<>))
        {
            if (value.Equals(Activator.CreateInstance(type.GetGenericArguments()[0])))
                return CreateArgumentException(value, locationName, locationKind);
        }
        else if (value.Equals(Activator.CreateInstance(type)))
            return CreateArgumentNullException(value, locationName, locationKind);
        return null;
    }
}

该方面的示例使用将是:

public class Example
{
    [NotDefault]
    public DateTime Timestamp { get; set; }
}

当代码尝试设置属性时,如本例所示...

new Example().Timestamp = DateTime.UtcNow;

。我得到以下MissingMethodException

System.MissingMethodException: Method not found: 'System.Exception NotDefaultAttribute.ValidateValue(System.ValueType, System.String, PostSharp.Reflection.LocationKind)'.
   at Example.set_Timestamp(DateTime value)

将 PostSharp 降级到 3.0.36 可解决此问题。但是,这不是一个真正的选择,因为我们即将切换到需要 3.0.38 或更高版本的 .NET 4.5.1。(更不用说,被困在旧版本上是一种痛苦。

PostSharp gives MissingMethodException

对所述用例的支持已在PostSharp版本3.1.27中实现。从该版本开始,可以在任何值类型属性上应用带有方法 ValidateValue(ValueType value, ...) 的验证方面。

相关文章:
  • 没有找到相关文章