我正在研究runtime locates assemblies我是如何想知道是否有办法让Assembly.Load
找到一个程序集的路径而不是实际加载它?
我需要这样做的原因是因为来自AssemblyDefinition.ReadAssembly
的{{1}}需要一条直接连接到程序集的路径,并且不会为尝试为自己找到它而付出额外的努力。我希望将标准Mono.Cecil
和System.Reflection
的功能结合起来。
答案 0 :(得分:2)
Mono.Cecil使用程序集解析器从程序集名称中获取AssemblyDefinition
。
AssemblyNameReference reference = AssemblyNameReference.Parse("Foo, Version=1.0.0.0");
DefaultAssemblyResolver resolver = new DefaultAssemblyResolver();
AssemblyDefinition foo = resolve.Resolve(reference);
答案 1 :(得分:1)
新答案
您可以使用AssemblyName。不幸的是,我不在我的开发机器上,所以我无法对此进行测试。但AssemblyName用于Assembly.Load()的mscorlib实现。
我深入了解CoreCLR,看看我是否可以深入了解解析器实际查找文件的位置,但未成功。如果这不起作用,您可以尝试自己潜入CLR寻求答案。我把它缩小到FindAssembly电话
var assemblyName = new AssemblyName("YourAssembly versionwhateveretc");
var path = new Uri(assemblyName.EscapedCodeBase).LocalPath;
旧答案
ReflectionOnlyLoading是否适合您?
这应该允许您检查/交互程序集元数据,而无需将其完全加载到当前的AppDomain中。