如何在应用程序运行时正确连接DLL

时间:2018-04-05 06:56:58

标签: c# dll

我在运行应用程序时连接DLL时遇到问题。

我有什么?

  1. 我有 Interfaces.dll ,我在其中定义了将由插件实现的接口。我已经创建了新文件夹插件并将dll复制到此文件夹。

    public interface ITable
    {
        string ToString(List<int> _intArray);
        List<int> ToHex(string _stringArray);
    }
    public interface IAbout
    {
        string Description { get; }
        string Name { get; }
        string Author { get; }
        string Date { get; }
        string Link { get; }
        bool isDefault { get; }
        void About();
    }
    
  2. 我有插件 TableBasic.dll ,它实现了 Interfaces.dll 的接口。当我创建它时,我已将 Interfaces.dll 添加到文件夹插件

    中的引用
    public class Table : ITable, IAbout
    {
        ...
    }
    
  3. 我有应用程序,我有静态类插件静态方法加载,它加载指定的dll imlemenitng指定的接口。我已将文件夹插件中的 Interfaces.dll 添加到应用程序的引用中。

    public static object Load(string path, Type seekingInterface)
    {
        Type DLL = Assembly
            .LoadFrom(path)
            .GetTypes()
            .First(t => seekingInterface.IsAssignableFrom(t) &&
            typeof(IAbout).IsAssignableFrom(t));
        return Activator.CreateInstance(DLL);
    }
    
  4. 错误

    当我尝试将加载功能称为

    Plugins.Load(@"D:\Repositories\Crystal\Plugins\TableBasic.dll", typeof(ITable));
    

    我得到例外:

    System.InvalidOperationException: 'Sequence contains no matching element'
    

    但我不知道为什么,看起来我的应用程序和我的插件使用不同的 Interfaces.dll 和接口 ITable IAbout 在我的应用程序和插件中是不同的或...我不知道建议什么。

    你能帮我吗?

    为什么不重复:我想获取实现指定接口的类型,assembly.GetType("MyType");获取类型是不可接受的,因为我不知道类型的名称,如果我不能将它转换为任何接口我没有检查类型实现接口。

1 个答案:

答案 0 :(得分:0)

我已经创建了新项目并将代码从旧项目移到了新项目中。一切都按我的预期进行。我无法解释为什么旧项目不起作用。 我比较了新项目和旧项目的文件* .csproj,除了ProjectGuid之外,我没有看到任何不同的内容,但在不同的项目中它必须有所不同。