1

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

我目前得到的最好的是:

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

但这仍然会导致程序集被加载(尽管只加载到仅反射上下文中)。

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

4

1 回答 1

2

框架中的候选 API:

  • AssemblyDependencyResolver在 System.Runtime.Loader中有一个方法string ResolveAssemblyToPath(AssemblyName assemblyName),目前仅在 .NET Core 上可用。

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

    该库的创建者通过要求程序员提供一个为它工作MetadataLoadContext的依赖项来外部化这个问题。MetadataAssemblyResolver

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

框架外的其他库如何处理程序集解析?

一些特定于平台的指针

于 2019-03-31T23:38:05.460 回答