我在运行应用程序时连接DLL时遇到问题。
我有什么?
我有 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();
}
我有插件 TableBasic.dll ,它实现了 Interfaces.dll 的接口。当我创建它时,我已将 Interfaces.dll 添加到文件夹插件
中的引用public class Table : ITable, IAbout
{
...
}
我有应用程序,我有静态类插件静态方法加载,它加载指定的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);
}
错误
当我尝试将加载功能称为
时Plugins.Load(@"D:\Repositories\Crystal\Plugins\TableBasic.dll", typeof(ITable));
我得到例外:
System.InvalidOperationException: 'Sequence contains no matching element'
但我不知道为什么,看起来我的应用程序和我的插件使用不同的 Interfaces.dll 和接口 ITable 和 IAbout 在我的应用程序和插件中是不同的或...我不知道建议什么。
你能帮我吗?
为什么不重复:我想获取实现指定接口的类型,assembly.GetType("MyType");
获取类型是不可接受的,因为我不知道类型的名称,如果我不能将它转换为任何接口我没有检查类型实现接口。
答案 0 :(得分:0)
我已经创建了新项目并将代码从旧项目移到了新项目中。一切都按我的预期进行。我无法解释为什么旧项目不起作用。 我比较了新项目和旧项目的文件* .csproj,除了ProjectGuid之外,我没有看到任何不同的内容,但在不同的项目中它必须有所不同。