PostSharp MulticastAttributeUsage 不工作

PostSharp MulticastAttributeUsage not working

我在使用 PostSharp 和 Entity Framework 时遇到问题,因为 PostSharp 会为私有字段生成“backingField”属性,而 EDM 模型创建失败。我尝试使用 MulticastAttributeUsageAttribute.AttributeTargets 将其限制为属性 as described here。 但是这段代码:

[NotifyPropertyChanged(), MulticastAttributeUsage(MulticastTargets.Property)]
public abstract class MetrologijaEntityBase 
{
    public Guid Id { get; set; }
    public string ExternalKey { get; set; }
}

和这段代码

[NotifyPropertyChanged()]
[MulticastAttributeUsage(MulticastTargets.Property)]
public abstract class MetrologijaEntityBase 
{
    public Guid Id { get; set; }
    public string ExternalKey { get; set; }
}

给出与没有 MulticastAttributeUsage 属性的代码相同的结果 - 仍然生成私有字段的“backingField”属性(具有所有 getter 和 setter)(as it visible in IL Disassambler for my class)。 MetrologijaEntityBase 是 EF 业务模型实体层次结构的基础 class。 在这种情况下我做错了什么?

[MulticastAttributeUsage] 更改了它所应用的 MulticastAttribute 的默认行为,并且在应用于未从 MulticastAttribute 继承的 类 时没有任何效果。它可用于更改您自己方面的默认行为。它不会更改应用于同一声明的方面的行为(您通常可以通过更改方面本身的属性来做到这一点)。

[NotifyPropertyChanged] 是一个 type-level 方面,它适用于整个类型。通常不可能控制它对单个属性的操作,除非方面本身支持(NPC 方面目前不支持)。

作为解决方案,我建议在创建 EF 模型时以编程方式忽略基于名称的添加属性 here