== Why is this an issue? When defining custom attributes, https://learn.microsoft.com/en-us/dotnet/api/system.attributeusageattribute[AttributeUsageAttribute] must be used to indicate where the attribute can be applied. This will: * indicate how the attribute can be used * prevent it from being used at invalid locations == How to fix it === Code examples ==== Noncompliant code example [source,csharp,diff-id=1,diff-type=noncompliant] ---- public sealed class MyAttribute : Attribute // Noncompliant - AttributeUsage is missing { private string text; public MyAttribute(string text) { this.text = text; } public string Text => text; } ---- ==== Compliant solution [source,csharp,diff-id=1,diff-type=compliant] ---- [AttributeUsage(AttributeTargets.Class | AttributeTargets.Enum | AttributeTargets.Interface | AttributeTargets.Delegate)] public sealed class MyAttribute : Attribute { private string text; public MyAttribute(string text) { this.text = text; } public string Text => text; } ---- == Resources === Documentation * Microsoft Learn - https://learn.microsoft.com/en-us/dotnet/csharp/advanced-topics/reflection-and-attributes/creating-custom-attributes[Create custom attributes] * Microsoft Learn - https://learn.microsoft.com/en-us/dotnet/api/system.attributeusageattribute[AttributeUsageAttribute class] * Microsoft Learn - https://learn.microsoft.com/en-us/dotnet/api/system.attribute[Attribute class] ifdef::env-github,rspecator-view[] ''' == Implementation Specification (visible only on this page) include::../message.adoc[] include::../highlighting.adoc[] endif::env-github,rspecator-view[]