Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 如何在不加载程序集的情况下将程序集名称解析为程序集文件路径?_.net_System.reflection_Assembly Resolution_Assembly Loading - Fatal编程技术网

.net 如何在不加载程序集的情况下将程序集名称解析为程序集文件路径?

.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); 但这仍然会导致程序集被加载(尽管只加载到仅反射的上下文中) (假设我不想更改运行时查找程序集的方式

在.NET Framework、.NET Core或.NET标准中是否有任何公共API可以将
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程序集
    数据属性,如中所述。还有一个
    APP\u PATH
    data属性可用于探测

  • .NET Framework:中描述了组装解析算法。我希望该框架能够用API公开该算法(它没有),但至少在提供了这些信息的情况下,可以复制该算法