0

我编写了一个具有抽象类的应用程序。我想支持这个类作为插件的实现。

这是抽象类:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml.Linq;
using System.IO;

namespace Stub.Logic {
    public abstract class Connection {
        …stuff
    }
}

这是一个实现:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml.Linq;
using System.IO;
using Stub.Logic;

namespace MqConnection {
    public class MqConnection : Connection {
        …stuff
    }
}

该插件被放置在一个文件夹中,它被读取和加载。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Reflection;

namespace Stub.Logic {
    public class PluginManager {
        private static List<Type> connectionTypes = new List<Type>();

        public static void LoadConnectionTypes(string path) {
            DirectoryInfo dllDirectory = new DirectoryInfo(path);
            FileInfo[] dlls = dllDirectory.GetFiles("*.dll");
                foreach (FileInfo dllFileInfo in dlls) {
                    try {
                        Assembly assembly = Assembly.LoadFrom(dllFileInfo.FullName);
                        connectionTypes.AddRange(**assembly.GetTypes()**);
                    } catch (Exception ex) {
                        if (ex is System.Reflection.ReflectionTypeLoadException) {
                        var typeLoadException = ex as ReflectionTypeLoadException;
                        var loaderExceptions = typeLoadException.LoaderExceptions;
                        TextWriter writer = new StreamWriter(@"C:\Users\yoav.benzvi\Desktop\error.txt");
                        writer.WriteLine(loaderExceptions[0].ToString());
                        writer.Close();
                    }
                }
            }
        }
    }
}

它在 assembly.GetTypes() 调用时失败。这是我得到的错误:

System.IO.FileNotFoundException:无法加载文件或程序集“StubLogic,版本=1.0.0.0,Culture=neutral,PublicKeyToken=null”或其依赖项之一。该系统找不到指定的文件。文件名:'StubLogic,版本=1.0.0.0,文化=中性,PublicKeyToken=null'

我需要在插件文件夹中有 StubLogic.dll 吗?似乎是多余的,因为它已经是应用程序的一部分,所以我做错了什么?

编辑:添加参考属性:
在此处输入图像描述

Edit2:向所有人道歉。代码正在运行。问题在于我的糟糕测试。再次向在这里浪费时间的人道歉。

4

3 回答 3

1

我建议你这个代码

我修改了你的路径

DirectoryInfo(Path.Combine(Environment.CurrentDirectory, "YourDirectoryRepository"));

所以

 DirectoryInfo dInfo = new DirectoryInfo(Path.Combine(Environment.CurrentDirectory, "YourDirectoryRepository"));
 FileInfo[] files = dInfo.GetFiles("*.dll");
 List<Assembly> plugInAssemblyList = new List<Assembly>();

 if (null != files)
 {
      foreach (FileInfo file in files)
      {
           plugInAssemblyList.Add(Assembly.LoadFrom(file.FullName));
      }
 }
于 2013-03-25T14:25:59.567 回答
1

确保插件引用了您拥有的相同版本的 StubLogic 程序集,或者对于插件程序集项目中的 StubLogic 引用,“使用特定版本”为 false。

于 2013-03-25T14:20:18.517 回答
0

向所有人道歉。代码正在运行。问题在于我的糟糕测试。再次向在这里浪费时间的人道歉。

于 2013-03-25T14:47:22.710 回答