I would expect DLL parsing to be a one-off cost at assembly load time. Certainly that handles all the stuff detailed under "Assembly resolution". Assembly resolution is also recursive, so I would expect that to simplify "type tree traversal" by pre-stuffing all the types into a Dictionary.<p>That also necessarily has the parser for all the "System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" machinery.<p>>> "While C# does not support types with weird symbols, it is possible to have type names with spaces, commas, brackets, unprintable characters, and more. This is also heavily (ab)used by code obfuscators."<p>.. hmm. I didn't know that.<p>I will note that there is a milder version of this problem which you might encounter if you're trying to write a dotnet source generator, which is run inside the Roslyn compiler. You then need to remember that the types in the code being compiled are <i>not</i> directly visible from reflection, you have to ask the compiler to look them up for you in the parsed data.<p>These cases are easy:<p><pre><code> - types in the netstandard2.0 standard library
- types in the assembly currently being compiled
</code></pre>
This case is not:<p><pre><code> - types in assemblies in the same project which the current assembly depends on
</code></pre>
I ended up avoiding handling that at all. It does set some limits on what is easily done with source generators.<p>(by the way, someone sufficiently dedicated should be able to find the corresponding Microsoft loader code: it's all in the dotnet github)