无法从程序集加载类型

Mar*_*sen 2 .net c#

在您说什么之前,我已经阅读了有关此问题的先前提出的问题.那里的答案并没有解决我的问题.

我想,如果你知道答案的话,这很简单.这是我的问题:

我有几个项目的解决方案,我正在创建一个基于插件的应用程序,我使用Reflection来加载所有程序集.这部分没问题,我加载了所有的程序集

        var filePaths = Directory.GetFiles(@"C:\CustomerServiceModule\", "*.dll", SearchOption.AllDirectories).Where(n => n.Contains("bin"));
        foreach (var f in filePaths)
        {
            Assembly.LoadFile(f);
        }
Run Code Online (Sandbox Code Playgroud)

现在我想创建一个类型的实例,所以我可以使用它:

            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);
Run Code Online (Sandbox Code Playgroud)

这很糟糕,因为在KayakoData中我有这个:

KayakoService _service = new KayakoService("xxx", "yyy", "zzz");
Run Code Online (Sandbox Code Playgroud)

这个服务是一个有效的程序集,我以前用过它.版本号很好,GAC中没有任何内容覆盖它,我看不到使用程序集绑定日志查看器的任何错误.我仍然收到此错误:

[System.LoadTypeException] {"无法从程序集'KayakoRestAPI,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null'加载类型'KayakoRestAPI.KayakoService'.":"KayakoRestAPI.KayakoService"}

有人有什么好主意吗?我一直盯着自己.如果我从KayakoData中删除服务部分,整个过程都有效,但我确实需要运行该服务.

Dar*_*rov 6

引用LoadFile方法的文档:

使用LoadFile方法加载和检查具有相同标识但位于不同路径的程序集.LoadFile不会将文件加载到LoadFrom上下文中,也不会像LoadFrom方法那样使用加载路径解析依赖关系.LoadFile在这种有限的场景中很有用,因为LoadFrom不能用于加载具有相同标识但路径不同的程序集; 它只会加载第一个这样的组件.

结论:尝试LoadFrom以便加载依赖的程序集.