【问题标题】:How to determine the latest version number of a GAC assembly如何确定 GAC 程序集的最新版本号
【发布时间】:2009-10-13 05:50:51
【问题描述】:

我正在尝试为我的应用程序创建一个诊断日志,该日志将显示 GAC 中安装的程序集的最新版本号。例如,GAC 中有同一个程序集的两个版本:foo.dll 版本 1.0.0.0 和 foo.dll 版本 2.0.0.0。我需要如下函数:

GetLatestGacVersion("foo.dll");  // returns "2.0.0.0"

有人知道最好的方法吗?

谢谢!

【问题讨论】:

  • GAC 中有我的应用程序使用的程序集。我正在尝试让应用程序将该程序集的最新版本号打印到日志/对话框屏幕以用于技术支持目的。似乎已弃用的 LoadWithPartialName 方法满足这些最低要求。

标签: c# .net-2.0 gac version-numbering


【解决方案1】:

最简单的是:

Assembly a = Assembly.LoadWithPartialName ("foo.dll");
return a.GetName ().Version

它将自动为您提供来自 GAC 的最新版本程序集。

请注意,该方法已被弃用是有充分理由的。向 GAC 索取不特定的版本可能会带来很多麻烦。

如果你不知道你想做什么,很难给出进一步的建议,但一般来说,如果你正在寻找一个特定的版本,你应该探索它而不是仅仅加载“一些东西”。

【讨论】:

  • 澄清一下:除了问题所要求的以外,我并不想做任何事情,那就是:查找 GAC 程序集的最新版本号,以便对其进行记录。我很谨慎,因为这是一种已弃用的方法。但是,我认为我的应用程序是安全的,因为我不会将 LoadWithPartialName() 方法返回的 Assembly 对象用于其他任何事情。来自 MSDN:“此方法首先调用 Load。如果未找到程序集,则此方法从全局程序集缓存中返回具有相同简单名称和最高版本号的程序集。”非常感谢!
【解决方案2】:

Fusion API (fusion.dll) 周围使用managed wrapper,您可以枚举 GAC 中的程序集,按名称过滤它们并按版本排序。

【讨论】:

  • 诚然,这可能是完成我的任务的更正确方法。但是,不推荐使用的 LoadWithPartialName 方法似乎可以满足我对大多数情况的最低要求,只需一行代码且没有 COM 互操作。非常感谢您的建议!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-21
  • 2023-03-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多