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

问题描述 投票:1回答:1

命令“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而不是

c# .net
1个回答
1
投票

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

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

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


推荐问答