La mise en œuvre de la sémantique de fil statique sont en dessous du niveau IL, dans le .NET compilateur jit. Les compilateurs qui émettent à IL aime VB.NET et C# n'avez pas besoin de savoir quelque chose au sujet de Win32 TLS afin d'émettre code IL capable de lire et d'écrire une variable qui a le ThreadStatic attribut. Il n'y a rien de spécial à propos de la variable dans la mesure du C# sait - c'est juste un endroit pour lire et écrire des trucs. Le fait qu'il dispose d'un attribut, il est sans conséquence pour C#. C# a seulement besoin de savoir pour émettre de la IL lire ou écrire des instructions pour que le nom du symbole.
Le "lourd de levage" est fait par le CLR de base qui est responsable de la prise de IL travail sur une architecture matérielle particulière.
Cela expliquerait également pourquoi mettre l'attribut sur un inappropriée (non statique) symbole n'est pas d'obtenir une réaction de la part du compilateur. Le compilateur ne sait pas quelles sont les particularités de la sémantique de l'attribut nécessite. Outils d'analyse de Code comme FX/Cop, mais, devrait le savoir.
Une autre façon de voir les choses: CIL définit un ensemble de champs de stockage: statique (global) de stockage, membre de stockage, et de la pile de stockage. TLS n'est pas sur la liste, très probablement parce que TLS n'a pas besoin d'être sur cette liste. Si IL lire et écrire des instructions suffisantes pour accéder à TLS lorsque le symbole est marqué avec un TLS attribut, pourquoi devrait-IL avoir une quelconque représentation ou de traitement pour TLS? Il n'est pas nécessaire.