(1) In my further perusal of the docs I found an offhand sentence mentioning 
that Type.GetType() will return null if it doesn't have adequate permissions to 
interrogate the specified assembly.  That's not the problem here, but it does 
at least show that this method is designed to return null in certain 
circumstances, even if all of those circumstances aren't systematically 
documented. 


(2) It turns out that Type.GetType() requires you to specify the assembly where 
the type resides, if it's not in the current assembly.  How to do this is 
"explained" in an obtuse and roundabout fashion and requires some 
experimentation to figure out what the actual requirements are -- but the short 
answer is that you need to append to the type name a comma and an assembly name 
(without the .dll extension): 


Type t = Type.GetType("Namespace1.Names­paceN.ClassName,AssemblyBaseNa­me") 


If GetType can't find the type because you failed to specify the assembly, or 
you specified a non-existent assembly, it simply returns null.  Evidently if it 
can find the assembly but not the type within the assembly, it throws a 
TypeLoad Exception. 


If you do an early-bound instantiation of an object and then get its type and 
look at the Type.AssemblyQualifiedName property, you find that you can also 
specify (optionally, it turns out) the version, culture and public key, for 
example: 


Namespace.ClassName, AssemblyBaseName, Version=1.0.1019.15044, Culture=neutral, 
PublicKeyToken=null 


The spaces after the commas are cosmetic and optional.