【发布时间】:2013-10-18 18:23:36
【问题描述】:
以编程方式检查程序集是否已在本地计算机的 GAC(全局程序集缓存)中注册的最简单方法是什么?是否有一些易于使用的 .NET API,我可以在其中为程序集 DLL 或程序集对象本身提供一个位置,以检查它是否存在于本地计算机上的 GAC 中?在我的情况下,我正在检查的程序集将已经加载到程序检查的当前 AppDomain 中,所以我不确定调用 Assembly.ReflectionOnlyLoad 并捕获异常会像我在其他帖子中看到的那样工作,而且这似乎有点老套。
理想情况下,我希望避免调用像 gacutil.exe 这样的外部可执行文件进行检查。
【问题讨论】:
-
Check GAC for an assembly 的可能重复项
-
使用融合 api,IAssemblyCache.QueryAssemblyInfo。
-
@Hans 我可能应该指定我想要一个完全托管的解决方案,但你是对的,Fusion API 也可以满足我的需求。请参阅我的答案,了解我最终为完全托管的解决方案做了什么。
-
叹息。它是 C# 代码。看不到 unsafe 关键字,每个 C# 程序都使用 Fusion。您发布的是 On Error Resume Next 代码,即 Visual Basic 代码。
-
@Hans 是的,这不是不安全的代码,但如果可以的话,我也喜欢避免使用 COM,它看起来更简单,代码也少了很多。如果我称这是一个紧密的循环,我可能会使用 Fusion API 以避免糟糕的 try/catch 控制逻辑,但即使互操作也会有性能损失,尽管我猜测比堆栈展开要少得多来自异常捕获。
标签: c# .net .net-assembly global-assembly-cache