无法从程序集加载类型

本文关键字:加载 类型 程序集 | 更新日期: 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中没有任何东西可以覆盖它,我看不到使用程序集绑定日志查看器的任何错误。我仍然得到这个错误:

[系统。{"无法加载类型'KayakoRestAPI。KayakoService' from assembly 'KayakoRestAPI, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'.":"KayakoRestAPI.KayakoService"}

谁有什么好主意?我一直在看这个。如果我从KayakoData中删除服务部分,整个事情就会正常工作,但我真的需要运行服务。

无法从程序集加载类型

引自LoadFile方法的文档:

使用LoadFile方法来加载和检查具有相同的身份,但位于不同的路径。LoadFile没有加载文件到LoadFrom上下文中,并且不解析依赖项使用加载路径,就像LoadFrom方法那样。LoadFile在这个有限的场景中很有用,因为LoadFrom不能用于加载具有相同标识但不同的程序集路径;它将只加载第一个这样的程序集。

结论:尝试LoadFrom以加载相关程序集

您只需要从该项目的程序集信息更改.dll的版本。然后重新构建解决方案。