我将签名的dll放入GAC。我从其他应用程序可以访问它的文件夹中删除了这个 dll。我尝试运行使用该 dll 的客户端应用程序。Dll 立即被放回原始文件夹。它是如何发生的?
我猜 GAC 正在监视文件夹,当它检测到缺少 dll 时,它会将最新版本放回其他应用程序可以访问的文件夹中。如果我是正确的,请告诉我如果重新构建,GAC 是否会再次自动备份 dll。
GAC 不知道程序集的来源。最可能的解释是您只是通过 IDE 重建了 DLL。
我不知道为什么会发生这种情况,但这些信息可能会对您有所帮助,
您不需要从复制到 GAC 的位置删除文件。如果应用程序依赖于程序集,则 GAC 是主要查找位置。
此外,如果您将使用不同的版本并使用重定向,请务必在您的参考属性中将“特定版本”标记为错误。
回答您的问题:不,GAC 不会监视任何其他文件夹以查找对 dll 所做的更新。您必须使用 gacutil 安装每个版本的 dll。
要成功部署 .NET Framework 应用程序,您必须了解公共语言运行时如何定位和绑定到构成您的应用程序的程序集。默认情况下,运行时尝试与构建应用程序的程序集的确切版本进行绑定。此默认行为可以被配置文件设置覆盖。
尝试定位程序集并解析程序集引用时,公共语言运行库会执行许多步骤。每个步骤都将在以下部分中进行说明。在描述运行时如何定位程序集时,经常使用探测一词。它指的是用于根据程序集名称和文化定位程序集的一组启发式方法。
您可以使用Windows 软件开发工具包 (SDK) 中包含的程序集绑定日志查看器 (Fuslogvw.exe) 查看日志文件中的绑定信息。
问候...
s