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

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (47)

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

我目前得到的最好的是:

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

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

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

提问于
用户回答回答于

显然,这样的API不存在:

我刚刚找到了System.Reflection.MetadataLoadContextGitHub上的源代码nuget.org 上的软件包),它显然面临着完全相同的问题:能够Assembly从a中检索一个AssemblyName,这显然需要从某个地方加载前者。

该库的创建者通过要求程序员提供MetadataLoadContext具有为其MetadataAssemblyResolver工作的依赖项来外化此问题。

虽然这个库附带了一个具体的实现(PathAssemblyResolver),但它没有提供封装运行时的本机程序集探测/解析算法的实现。

如果dotnet/corefx不能这样做,可能没有简单的方法可以做到,或者根本没有。

扫码关注云+社区

领取腾讯云代金券