如何在不加载该程序集的情况下将AssemblyName解析为程序集文件路径?

问题描述 投票:0回答:1

.NET Framework,.NET Core或.NET Standard中是否有任何公共API可以将System.Reflection.AssemblyName解析为要加载的程序集文件的文件路径,而不实际加载该程序集?

我目前得到的最好的是:

string ResolveToPath(AssemblyName name) => Assembly.ReflectionOnlyLoad(name).Location;

但是仍然会导致装配(尽管只进入仅反射的上下文)。

(假设我不想改变运行时如何定位程序集。我要求在库中使用它,我不能自由检查应用程序配置文件,定义AppDomain.AssemblyResolve处理程序等)

.net system.reflection assembly-resolution assembly-loading
1个回答
0
投票

Candidate APIs in the framework:

  • AssemblyDependencyResolver in System.Runtime.Loader有一个方法string ResolveAssemblyToPath(AssemblyName assemblyName),目前只在.NET Core上提供。
  • System.Reflection.MetadataLoadContext(source on GitHubpackage on nuget.org),显然面临完全相同的问题:能够从Assembly检索AssemblyName,这显然需要从某处加载前者。 该库的创建者通过要求程序员提供具有MetadataLoadContext依赖关系的MetadataAssemblyResolver来实现此问题,从而将此问题外化。 虽然这个库附带了一个具体的实现(PathAssemblyResolver),但它没有提供封装运行时的本机程序集探测/解析算法的实现。

How do other libraries outside the framework deal with assembly resolution?

Some platform-specific pointers

© www.soinside.com 2019 - 2024. All rights reserved.