How does the ObsoleteAttribute work?
<p>Newbie question:  unless I'm mistaken, most attributes appear to be benign until you use runtime reflection on your assembly(ies) or classes to discover the attributes and act upon them.  I've noticed that the <code>ObsoleteAttribute</code> seems to be unique in the .NET attributes where it can dynamically raise warnings and errors during compilation:</p>

<pre><code>    [Obsolete("don't use", false)]  
    public string Name { get; set; }
</code></pre>

<p>The question I have is how does it do this?  Is this something built in to the compiler, as the associated warning message number seems specific to the ObsoleteAttribute?  I've google'd and can't find any obvious answers.  I know with C++ and a combination of nifty macro tricks you can get C++ to emit warnings and errors on demand, but how does C# do this?  Thanks...</p>
