如何获取每个GAC程序集的位置?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何获取每个GAC程序集的位置?相关的知识,希望对你有一定的参考价值。

命令“gacutil”仅列出全名,而没有任何关于实际位置的线索。我知道位置从这些路径开始:

 C:\WINDOWS\assembly\...
 C:\WINDOWS\Microsoft.Net\...

但是这些路径存储了许多其他程序集,而不仅仅是GAC中的程序集。我通过调用Assembly.Load(FullName)Assembly.ReflectionOnlyLoad(FullName)来使用一些C#代码来获取包含位置的对象Assembly,但是它们将FullName中的版本更改为与当前运行时兼容的另一个版本,例如为target NET Framework 4.5.2编译代码时,如果它试图加载mscorlib, Version=2.0.0.0然后它获取mscorlib, Version=4.0.0.0而不是

答案

您可以使用COM枚举汇编缓存(CreateAssemblyEnumIAssemblyEnumCreateAssemblyCacheIAssemblyCacheGetNextAssemblyGetAssemblyNameQueryAssemblyInfo)。

QueryAssemblyInfo返回ASSEMBLY_INFO,其中包括组装路径(pszCurrentAssemblyPathBuf)。

Junfeng Zhang's MSDN blog about Sample Managed GAC API Wrappers中有一些使用这些函数的例子

以上是关于如何获取每个GAC程序集的位置?的主要内容,如果未能解决你的问题,请参考以下文章

共享程序集GAC

在选项卡式应用程序中的何处放置位置代码?

确定是不是正在使用 GAC 和 NGen 的程序集

如何解析 MPD 清单视频文件并获取图像适配集的片段?

如何查询gac的汇编文件

何时以及何时不安装到 GAC 中?