Attribute multicasting has been primarily designed as a mechanism to add aspects to a program. Most of the time, the custom attribute representing an aspect can be removed when the aspect has been applied.

By default, if you add a multicast attribute to a program and look at the resulting program using a disassembler or System.Reflection, you will not find these custom attributes.

If you need your MulticastAttribute to be reflected by System.Reflection or any other tool, you have to set the PersistMetaData property of the MulticastAttributeUsageAttribute to true.

For instance:

[MulticastAttributeUsage( MulticastTargets.Class, PersistMetaData = true )]
public class TagAttribute : MulticastAttribute 
{
  public string Tag;
}