c# - 使用反射在 DLL 中搜索 C#

标签 c# reflection dll

目前我正在使用反射在我的程序集中搜索实现接口(interface)的类,然后我检查这些类的名称以查看它是否与搜索的类匹配。

我的下一个任务是在此代码中添加一种在目录中搜索 DLL 文件的方法,我唯一的提示是我可以使用“System.Environment.CurrentDirectory”。我还需要考虑并非所有 DLL 都包含 .net 程序集这一事实。

有人可以推荐从哪里开始吗?

        IInstruction instruction = null;
        string currentDir = Environment.CurrentDirectory;

        var query = from type in Assembly.GetExecutingAssembly().GetTypes()
                    where type.IsClass && type.GetInterfaces().Contains(typeof(IInstruction))
                    select type;

        foreach (var item in query)
        {
            if (opcode.Equals(item.Name, StringComparison.InvariantCultureIgnoreCase))
            {
                instruction = Activator.CreateInstance(item) as IInstruction;
                return instruction;
            }
        }

操作码是我正在搜索的类的名称。

最佳答案

像这样的东西应该让你开始,它会尝试加载当前目录中的所有 .dll 文件并返回它们包含的所有类型,这些类型的短名称包含在 opcode;

private static IEnumerable<Type> GetMatchingTypes(string opcode)
{
    var files = Directory.GetFiles(Environment.CurrentDirectory, "*.dll");

    foreach (var file in files)
    {
        Type[] types;
        try
        {
            types = Assembly.LoadFrom(file).GetTypes();
        }
        catch
        {
            continue;  // Can't load as .NET assembly, so ignore
        }

        var interestingTypes =
            types.Where(t => t.IsClass &&
                             t.GetInterfaces().Contains(typeof (IInstruction)) &&
                             t.Name.Equals(opcode, StringComparison.InvariantCultureIgnoreCase));

        foreach (var type in interestingTypes)
            yield return type;
    }
}

关于c# - 使用反射在 DLL 中搜索 C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20240092/

相关文章:

c# - 无法在 wpf 中使用 Type.GetMember 访问私有(private)字段

c# - 有没有办法通过 C# 代码获取类中所有 namespace 'using'?

windows - DLL 中函数名称的最大长度

c++ - 尼康相机 SDK 不可重入

c# - 如何打开在另一个应用程序中打开的文件

c# - 使用 Datetime.UTC 设置中非西部时间

c# - 参数 'addresses'不能为空串

c# - IPv4 和 IPv6 地址检查器

java - 我怎么知道自动装箱后是否是原始类型?

c++ - 为什么 DLL 没有复制到输出目录? C++ Visual Studio