Type.GetType("namespace.a.b.ClassName") returns null

Viewed 212933

This code:

Type.GetType("namespace.a.b.ClassName")

returns null.

and I have in the usings:

using namespace.a.b;

Update:

The type exists, it's in a different class library, and i need to get it by string name.

17 Answers

As Type.GetType(String) need the Type.AssemblyQualifiedName you should use Assembly.CreateQualifiedName(String, String).

string typeName = "MyNamespace.MyClass"; // Type.FullName
string assemblyName = "MyAssemblyName"; // MyAssembly.FullName or MyAssembly.GetName().Name
string assemblyQualifiedName = Assembly.CreateQualifiedName(assemblyName , typeName);
Type myClassType = Type.GetType(assemblyQualifiedName);

The Version, Culture and PublicKeyToken are not required for assemblyName that's why you can use MyAssembly.GetName().Name.

About Type.GetType(String) :

If the type is in the currently executing assembly or in Mscorlib.dll, it is sufficient to supply the type name qualified by its namespace.

For me, a "+" was the key! This is my class(it is a nested one) :

namespace PortalServices
{
public class PortalManagement : WebService
{
    public class Merchant
    {}
}
}

and this line of code worked:

Type type = Type.GetType("PortalServices.PortalManagement+Merchant");

Very late reply, but if anyone is dealing with this a decade later:

There is a very, very small chance that your class in Visual Studio has a Build Action set to "Content" instead of "Compile".

Click on your class in Solution Explorer, then look at the properties.

Check that Build Action is "Compile", not "Content".

Related