C#-加载DLL动态-System.Reflection.ReflectionTypeLoadException:无法加载一种或多种请求的类型

时间:2019-04-24 10:20:32

标签: c# dll dllimport dll-injection dynamic-dll-import

在C#中,当尝试使用以下代码从文件夹中加载DLL时,使用下面的代码将它们放在堆栈跟踪下面。

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

堆栈跟踪:

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()

我还检查了现有的解决方案: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#(无效)

2 个答案:

答案 0 :(得分:1)

解决方案问题很容易。它只是使用与装配不同的方法。而不是使用LoadFile,我们应该使用LoadFrom

因此下面的代码有效地解决了问题

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

不需要使用GetExportedTypes。我们可以获取所有类型。

答案 1 :(得分:1)

Assembly.LoadFile仅加载contents of an assembly,但是Assembly.LoadFrom完美加载assembly file(如果存在依赖关系,则为依赖项)。