如何获取每个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枚举汇编缓存(CreateAssemblyEnum
→IAssemblyEnum
,CreateAssemblyCache
→IAssemblyCache
,GetNextAssembly
→GetAssemblyName
→QueryAssemblyInfo
)。
QueryAssemblyInfo
返回ASSEMBLY_INFO
,其中包括组装路径(pszCurrentAssemblyPathBuf
)。
在Junfeng Zhang's MSDN blog about Sample Managed GAC API Wrappers中有一些使用这些函数的例子
以上是关于如何获取每个GAC程序集的位置?的主要内容,如果未能解决你的问题,请参考以下文章