gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 15:31:43 26 4
gpt4 key购买 nike

目前我正在使用反射在我的程序集中搜索实现接口(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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com