.net 如何在不加载程序集的情况下将程序集名称解析为程序集文件路径?
在.NET Framework、.NET Core或.NET标准中是否有任何公共API可以将.net 如何在不加载程序集的情况下将程序集名称解析为程序集文件路径?,.net,system.reflection,assembly-resolution,assembly-loading,.net,System.reflection,Assembly Resolution,Assembly Loading,在.NET Framework、.NET Core或.NET标准中是否有任何公共API可以将System.Reflection.AssemblyName解析为将要加载的程序集文件的文件路径,而不实际加载该程序集 我目前得到的最好结果是: string ResolveToPath(AssemblyName)=>Assembly.reflectiononnlyload(name.Location); 但这仍然会导致程序集被加载(尽管只加载到仅反射的上下文中) (假设我不想更改运行时查找程序集的方式
System.Reflection.AssemblyName
解析为将要加载的程序集文件的文件路径,而不实际加载该程序集
我目前得到的最好结果是:
string ResolveToPath(AssemblyName)=>Assembly.reflectiononnlyload(name.Location);
但这仍然会导致程序集被加载(尽管只加载到仅反射的上下文中)
(假设我不想更改运行时查找程序集的方式。我要求在库中使用此方法,在库中我无法自由检查应用程序配置文件,定义AppDomain.AssemblyResolve
处理程序等。)框架中的候选API:
- 具有当前仅在.NET Core上可用的方法
字符串ResolveAssemblyToPath(AssemblyName AssemblyName)
- System.Reflection.MetadataLoadContext(,),显然面临着完全相同的问题:能够从
检索AssemblyName
程序集,这显然需要从某处加载前者 该库的创建者通过要求程序员提供一个
,并提供一个依赖项来解决这个问题 虽然这个库附带了一个具体的实现(),但它没有提供封装运行时本机程序集探测/解析算法的实现MetadataLoadContext
- Mono.Cecil使用its建模组件解析,并在中有一个基本实现
- Roslyn有一个在中实施的 (我是通过和发现的。)
- .NET Core:在.NET Core上,上述两个库似乎都依赖于
中的AppContext
数据属性,如中所述。还有一个TRUSTED\u PLATFORM\u程序集
data属性可用于探测APP\u PATH
- .NET Framework:中描述了组装解析算法。我希望该框架能够用API公开该算法(它没有),但至少在提供了这些信息的情况下,可以复制该算法