我有一个程序集的完全限定名(和/或一个AssemblyName对象),例如
System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
这些可以是当前未在正在运行的应用程序中加载的程序集的名称
我想弄清楚这个组件所在的位置/将从用户的机器上加载。
例如,如果我在上面的字符串上尝试了Assembly.Load()或.ReflectionOnlyLoad(),这将加载正常,我可以检查resultig Assembly对象"位置"属性。
但是,我希望获得这些信息,而无需实际加载(并且必须经历AppDomains等问题以便随后卸载)程序集。
基本上,我怎样才能获得Assembly.Load() 用来加载的文件路径(但是我不必实际加载程序集)?
谢谢!
编辑:关于为什么(我认为我)需要这样做的一些信息:
我正在创建一个C#脚本编辑器,用户应该能够定位某些.Net Framework版本,理想情况下不需要在他们的机器上安装开发SDK(yay,Roslyn!)。
因此,在我的编辑器中,我包括所有框架版本的FrameworkList.xml文件,其中包含构建随给定Framework版本一起提供的完全限定程序集名称的所有信息。
现在在我的编辑器中,我列出了所有这些内容。当用户想要在他们的项目中引用它们时,我需要创建一个Microsoft.CodeAnalysis.MetadataReference,以便将此引用传递给Microsoft.CodeAnalysis.Project。我可以使用(不加载程序集)的这种MetadataReference的唯一工厂方法是接受它的完整物理文件路径。因此,我想找出具有给定AssemblyName的程序集在磁盘上的位置。