【问题标题】:GAC behaviourGAC 行为
【发布时间】:2009-02-18 21:26:49
【问题描述】:

我将签名的 dll 放入 GAC。我从其他应用程序可以访问它的文件夹中删除了这个 dll。我尝试运行使用该 dll 的客户端应用程序。 Dll 立即被放回原始文件夹。它是怎么发生的?

我猜 GAC 正在监视文件夹,当它检测到缺少 dll 时,它会将最新版本放回其他应用程序可以访问的文件夹中。如果我是正确的,请告诉我如果重新构建,GAC 是否会再次自动备份 dll。

【问题讨论】:

  • 我终于发现了如何删除这个dll。无论如何,客户端代码都能够运行这个库。我注意到该 dll 的副本已放入 Windows\assembly\GAC_MSIL - 为什么会这样。我希望客户端代码使用原始目录中的 dll,而不是 windows...
  • 那是 GAC 商店。 CLR 总是先搜索 GAC,然后再探查本地目录。请更新您的帖子并说明您是如何删除 DLL 的。

标签: .net dll gac


【解决方案1】:

GAC 不知道程序集的来源。最可能的解释是您只是通过 IDE 重新构建了 DLL。

【讨论】:

    【解决方案2】:

    我不知道为什么会发生这种情况,但这些信息可能会对您有所帮助,

    您不需要从复制到 GAC 的位置删除文件。如果应用程序依赖于程序集,则 GAC 是查找的主要位置。

    【讨论】:

      【解决方案3】:

      此外,如果您将使用不同的版本并使用重定向,请务必在您的参考属性中将“特定版本”标记为错误。

      回答您的问题:不,GAC 不会监视任何其他文件夹以查找对 dll 所做的更新。 您必须使用 gacutil 安装每个版本的 dll。

      【讨论】:

        【解决方案4】:

        要成功部署您的 .NET Framework 应用程序,您必须了解公共语言运行时如何定位和绑定到构成您的应用程序的程序集。默认情况下,运行时尝试与构建应用程序的程序集的确切版本绑定。这个默认行为可以被配置文件设置覆盖。

        在尝试定位程序集并解析程序集引用时,公共语言运行时会执行多个步骤。每个步骤都将在以下部分中进行说明。在描述运行时如何定位程序集时,经常使用探测这个术语。它指的是用于根据程序集名称和文化定位程序集的启发式方法。

        您可以使用 Windows 软件开发工具包 (SDK) 中包含的Assembly Binding Log Viewer (Fuslogvw.exe) 查看日志文件中的绑定信息。

        问候...

        s

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-10-28
          • 2011-07-03
          • 1970-01-01
          • 1970-01-01
          • 2011-01-26
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多