【发布时间】:2020-10-28 00:55:42
【问题描述】:
我有一个 .Net 项目,其中给了我一个程序集 (*.dll),我必须列出包含的类型及其成员。但是,我没有得到程序集的引用。
假设给我A.dll,其中有一个类型:
public class TypeInA : IInterfaceInB
{
...
}
由于没有给我 B,所以当我尝试调用时,我会收到 FileNotFoundException
typeof(TypeInA).GetInterfaces()
因为它找不到B.dll。
我不需要关于IInterfaceInB 的详细信息,只需要它的命名空间限定名称。有没有一种方法可以让我无需加载B.dll?
更多上下文
我正在关注MetadataLoadContext docs 加载A.dll 并枚举其类型:
var runtimeAssemblies = Directory.GetFiles(RuntimeEnvironment.GetRuntimeDirectory(), "*.dll");
var paths = new List<string>(runtimeAssemblies) {path};
var resolver = new PathAssemblyResolver(paths);
using var context = new MetadataLoadContext(resolver);
var assembly = context.LoadFromAssemblyPath(path);
【问题讨论】:
-
你想知道柜子里有什么,但又不想打开柜子。你需要重新考虑你的问题。如果你真的需要这样做,我不知道为什么。将其存储在元数据文件中,或解析 IL
-
TypeInA已经引用了IInterfaceInB。我只想知道它的名字。参考是什么样的?它不包含类型名称吗? -
我有点困惑,所以你有一个引用另一个不存在的程序集的程序集,你只是想找到你的程序集中存在的类型的完全限定名称没有?
-
不一定“不存在”只是“没有”,但是是的。
-
typeof(TypeInA).Name不起作用?
标签: c# reflection