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

11k Views Asked by At

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)

2

There are 2 best solutions below

3
Md. Alim Ul Karim On BEST ANSWER

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.

0
AminRostami On

Assembly.LoadFile only loads the contents of an assembly , But Assembly.LoadFrom loads an assembly file perfectly (and dependencies If there are).