public void VersionInAssemblyQualifiedTypeNameExternal() { // A syntax error in version, culture or token is silently ignored... Type tSyntaxError = Type.GetType("ExternalDll.ExternalClass, CK.Storage.Tests.ExternalDll, VersionSYNTAX=1.0.0.0, CultureSYNTAX=neutral, PublicKeyTokenSYNTAX=b77a5c561934e089", true); Assert.That(tSyntaxError, Is.Not.Null); //As dlls are signed, version, culture & PublicTokenKey must match. Testing the WeakTypeFinder, that truncates these information, to load the type regardeless of them ISimpleTypeFinder wtf = SimpleTypeFinder.WeakDefault; Type t2 = SimpleTypeFinder.WeakDefault.ResolveType("ExternalDll.ExternalClass, CK.Storage.Tests.ExternalDll, Version=5.0.4.0, Culture=neutral, PublicKeyToken=null", true); Type t1 = SimpleTypeFinder.WeakDefault.ResolveType("ExternalDll.ExternalClass, CK.Storage.Tests.ExternalDll, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null", true); //Provinding only namespace.classname, assembly works properly Type t0 = Type.GetType("ExternalDll.ExternalClass, CK.Storage.Tests.ExternalDll", true); // When the full name or the assembly can not be found, GetType( ..., false ) gently returns null. // Type tClassNotFound = Type.GetType("ExternalDll.Unknown.ExternalClass, CK.Storage.Tests.ExternalDll", false); Assert.That(tClassNotFound, Is.Null); Type tAssemblyNotFound = Type.GetType("ExternalDll.ExternalClass, CK.Storage.Tests.Unknown.ExternalDll", false); Assert.That(tAssemblyNotFound, Is.Null); // BUT: an invalid PublicKeyToken throws a FileLoadException regardless of the throwOnError parameter... // // Type tInvalidSignature = Type.GetType( "ExternalDll.ExternalClass, CK.Storage.Tests.ExternalDll, Version=1.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089", false ); Assert.Throws <FileLoadException>(() => Type.GetType("ExternalDll.ExternalClass, CK.Storage.Tests.ExternalDll, Version=1.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089", false)); }
Type GetType(string typeName) { ISimpleTypeFinder f = ComponentModelExtension.GetService <ISimpleTypeFinder>(this); if (f == null) { return(Type.GetType(typeName, !_ignoreUnresolvedType)); } return(f.ResolveType(typeName, !_ignoreUnresolvedType)); }