在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#(无效)
答案 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
(如果存在依赖关系,则为依赖项)。