The System.TypeLoadException
with the message “Could not load type ‘xyz'” occurs in C# when the runtime is unable to load a specific type. This typically happens due to issues such as missing assemblies, mismatched versions, or incorrect type names.
Common Causes and Solutions
- Missing Assembly:
If the assembly containing the type is not referenced or not available at runtime, this exception will occur.
// Example: Trying to use a type from a missing assembly
var type = Type.GetType("MissingNamespace.MissingClass"); // TypeLoadException
Fix: Ensure the required assembly is referenced and available.
// Add a reference to the missing assembly in your project
var type = Type.GetType("ExistingNamespace.ExistingClass"); // Works if the assembly is referenced
- Incorrect Type Name:
If the type name is misspelled or does not exist, this exception will occur.
var type = Type.GetType("MyNamespace.MyClasss"); // Typo in type name
Fix: Verify the type name and ensure it is correct.
var type = Type.GetType("MyNamespace.MyClass"); // Correct type name
- Mismatched Assembly Versions:
If the assembly version used at runtime does not match the version expected by the application, this exception can occur. Fix: Ensure the correct version of the assembly is referenced and deployed.
// Use binding redirects in the app.config or web.config to resolve version conflicts
<dependentAssembly>
<assemblyIdentity name="MyAssembly" publicKeyToken="..." culture="neutral" />
<bindingRedirect oldVersion="1.0.0.0" newVersion="2.0.0.0" />
</dependentAssembly>
- Type Moved or Renamed:
If the type has been moved to a different namespace or assembly, this exception can occur. Fix: Update the code to use the correct namespace and assembly.
// Old code
var type = Type.GetType("OldNamespace.MyClass");
// Updated code
var type = Type.GetType("NewNamespace.MyClass");
- Type Visibility:
If the type is not public or is internal and not accessible from the calling assembly, this exception can occur. Fix: Ensure the type is public or useInternalsVisibleTo
to make it accessible.
// In the assembly containing the internal type
[assembly: InternalsVisibleTo("CallingAssembly")]
- Generic Type Issues:
If you attempt to load a generic type without specifying the type arguments, this exception can occur.
var type = Type.GetType("MyNamespace.MyGenericClass"); // Missing type arguments
Fix: Provide the type arguments for the generic type.
var type = Type.GetType("MyNamespace.MyGenericClass`1[[System.Int32]]"); // Correct generic type
- Assembly Loading Context:
If the assembly is loaded in a different context (e.g.,LoadFrom
context instead ofLoad
context), this exception can occur. Fix: UseAssembly.Load
instead ofAssembly.LoadFrom
to ensure the correct context.
var assembly = Assembly.Load("MyAssembly");
var type = assembly.GetType("MyNamespace.MyClass"); // Works in the correct context
- Platform or Framework Mismatch:
If the type is specific to a platform or framework (e.g., .NET Core vs .NET Framework), this exception can occur. Fix: Ensure the correct platform or framework is targeted.
// Verify the target framework in the project file
<TargetFramework>net6.0</TargetFramework>