Search code examples
c#dlldllimportdll-injectiondynamic-dll-import

C# - Loading DLL Dynamic - System.Reflection.ReflectionTypeLoadException: Unable to load one or more of the requested types


In C#, while loading DLL from folder using the below code getting these below stack trace, when tried to get the types.

var assembly = Assembly.LoadFile(assemblyInfo.FullName); // assembly loads perfectly using the absolute path.
var types = assembly.GetTypes(); // this line throws the below stacktrace.

Stack trace:

System.Reflection.ReflectionTypeLoadException: Unable to load one or more of the requested types. Retrieve the LoaderExceptions property for more information.
   at System.Reflection.RuntimeModule.GetTypes(RuntimeModule module)
   at System.Reflection.Assembly.GetTypes()

I also have checked existing solutions: Error message 'Unable to load one or more of the requested types. Retrieve the LoaderExceptions property for more information.', Loading DLLs at runtime in C# (didn't work)


Solution

  • Solution to the problem was quite easy. It is just using a different method from the assembly. Instead of using LoadFile, we should use LoadFrom

    So the below code solves the problem efficiently

    var assembly = Assembly.LoadFrom(assemblyInfo.FullName); // loads perfectly, absolute path to dll
    var types = assembly.GetTypes(); // loads perfectly.
    

    There is no need to use GetExportedTypes. We can get all the types.

    LoadFrom does auto reflection binding with other DLLs, however, loadfile doesn't do the same.

    Which resolves that export issue.