无法从程序集加载类型

时间:2011-09-26 07:01:45

标签: c# .net

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

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

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

        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中没有任何内容覆盖它,我看不到任何使用程序集绑定日志查看器的错误。我仍然得到这个错误:

  

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

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

2 个答案:

答案 0 :(得分:6)

引用LoadFile方法的文档:

  

使用LoadFile方法加载和检查具有。的程序集   相同的身份,但位于不同的路径。 LoadFile没有   将文件加载到LoadFrom上下文中,并且无法解析   使用加载路径的依赖关系,如LoadFrom方法所做的那样。   LoadFile在这种有限的场景中非常有用,因为LoadFrom不可用   用于加载具有相同身份但不同的程序集   路径;它只会加载第一个这样的组件。

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

答案 1 :(得分:0)

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