无法从程序集加载类型
本文关键字:加载 类型 程序集 | 更新日期: 2023-09-27 18:09:54
在你说什么之前,我已经阅读了之前关于这个问题的问题。上面的答案并不能解决我的问题。
如果你知道答案的话,我想这很简单。我的问题是:
我有几个项目的解决方案,我正在创建一个基于插件的应用程序,我使用反射来加载所有程序集。这部分很好,我加载了所有的程序集,像这样
var filePaths = Directory.GetFiles(@"C:'CustomerServiceModule'", "*.dll", SearchOption.AllDirectories).Where(n => n.Contains("bin"));
foreach (var f in filePaths)
{
Assembly.LoadFile(f);
}
现在我想创建一个类型的实例,这样我就可以使用它了:
var assembly = AppDomain.CurrentDomain.GetAssemblies().Where(a => a.ManifestModule.Name == "Kayako.dll").SingleOrDefault();
var name = assembly.GetTypes();
var type = assembly.GetType("Kayako.KayakoData");
var lol = Activator.CreateInstance(type);
这很糟糕,因为在KayakoData中我有这个:
KayakoService _service = new KayakoService("xxx", "yyy", "zzz");
这个服务是一个可以工作的程序集,我以前使用过它。版本号很好,GAC中没有任何东西可以覆盖它,我看不到使用程序集绑定日志查看器的任何错误。我仍然得到这个错误:
谁有什么好主意?我一直在看这个。如果我从KayakoData中删除服务部分,整个事情就会正常工作,但我真的需要运行服务。[系统。{"无法加载类型'KayakoRestAPI。KayakoService' from assembly 'KayakoRestAPI, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'.":"KayakoRestAPI.KayakoService"}
引自LoadFile方法的文档:
使用LoadFile方法来加载和检查具有相同的身份,但位于不同的路径。LoadFile没有加载文件到LoadFrom上下文中,并且不解析依赖项使用加载路径,就像LoadFrom方法那样。LoadFile在这个有限的场景中很有用,因为LoadFrom不能用于加载具有相同标识但不同的程序集路径;它将只加载第一个这样的程序集。
结论:尝试LoadFrom以加载相关程序集
您只需要从该项目的程序集信息更改.dll的版本。然后重新构建解决方案。