C# 如何获取每个GAC组件的位置?

C# 如何获取每个GAC组件的位置?,c#,.net,C#,.net,命令“gacutil”只列出全名,而没有任何关于实际位置的线索。我知道位置从以下路径开始: C:\WINDOWS\assembly\... C:\WINDOWS\Microsoft.Net\... 但这些路径存储许多其他程序集,而不仅仅是GAC中的程序集。我通过调用Assembly.Load(FullName)或Assembly.reflectiononnlyload(FullName)使用了一些C#代码来获取包含位置的对象程序集,但它们将FullName中的版本更改为另一个版本 这与当前

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

 C:\WINDOWS\assembly\...
 C:\WINDOWS\Microsoft.Net\...
但这些路径存储许多其他程序集,而不仅仅是GAC中的程序集。我通过调用
Assembly.Load(FullName)
Assembly.reflectiononnlyload(FullName)
使用了一些C#代码来获取包含位置的对象程序集,但它们将
FullName
中的版本更改为另一个版本
这与当前运行时兼容,例如,当为
目标网络框架4.5.2
编译代码时,如果它尝试加载
mscorlib,Version=2.0.0.0
,则它会得到
mscorlib,Version=4.0.0
,而不是,您可以使用COM(→ <代码>IAssemblyEnum,→ <代码>IAssemblyCache,→ → ).

包含程序集路径的返回(
pszCurrentAssemblyPathBuf


为什么?GAC的全部要点是你不必关心程序集的位置。这是学习过程的一部分。由于程序集版本的使用有限,我想监控GAC中每个程序集的文件版本,MVC项目包中的文件版本,等等。显然,Microsoft会定期更新它们,并希望监控itOk。值得注意的是,.Net核心项目避免了GAC(尽管这可能会改变,我想我听到了一些关于钟摆以另一种方式摆动的消息)-因此,这对于新项目来说可能是有限的。您可以使用NuGet(电子邮件或电子邮件)保持最新或者找到一些好的博客并在那里得到通知(例如)对于一些只能手动使用的东西,您还可以编写一个powershell脚本来解析gacutil的输出,对每个文件进行哈希运算,然后进行差异化处理。就此而言,我认为GAC中文件的最后写入时间是您计算机上文件的最后更改日期,因此这将更加容易。