【问题标题】:Why does the GAC folders structure is not documented?为什么没有记录 GAC 文件夹结构?
【发布时间】:2019-11-02 17:08:43
【问题描述】:

为什么没有记录 GAC 文件夹结构?

我正在阅读 CLR via C# 一书,书中指出:

CSC.exe 不在 GAC 中查找引用程序集的原因是您必须 知道程序集文件的路径,并且 GAC 的结构没有记录。

我无法理解为 GAC 文件夹结构创建规则和记录它们的障碍是什么。

更新 在 cmets 中,有人建议可能存在技术问题,不允许实施文件夹结构的规则。但我可以通过提供可能规则的示例来证明情况并非如此:

1 GAC 只能包含强命名程序集。 2 根据定义,强命名程序集是具有名称、版本号、文化和公钥标记的程序集(实际上是公钥,但为了简单起见,我们可以使用该标记,因为公钥太长了)。 1 2 -> 3 每个程序集可以由名称、版本、文化和公钥令牌唯一标识。 3 -> 4 如果我们使用以下文件夹结构规则,那么我们将满足提供所需文件夹结构规则的初始目标:[名称]/[版本]/[文化]/[公钥令牌]/[程序集本身]

我错过了什么吗?

【问题讨论】:

  • GAC 需要特定版本架构和强类型名称。它的结构可以特定于每台运行 .NET 代码的机器
  • @PavelAnikhouski,版本模式的定义是什么?为什么 .Net 不对 GAC 文件夹的结构强制执行规则,并允许该结构对每台机器都是特定的?谢谢。
  • 因为每台机器都可以在 GAC 中拥有自己的程序集,或者具有不同版本和强名称的相同程序集。请看msdn
  • @PavelAnikhouski,这没有回答我的问题。我会稍微更新一下。谢谢。
  • 一些使实际结构不太有用的事情是,* GAC 结构自 .NET Framework 4.x 以来发生了变化,* 其他实现(如 Mono)使用不同的结构,* .NET Core 甚至没有GAC 你不应该真正关心 GAC 内部的样子,而只是将其用作共享程序集的一种方式。

标签: .net documentation clr assemblies gac


【解决方案1】:

.NET 初始标准文档仅定义 GAC 的功能,但不限制其实现。因此,

  • .NET Framework 2.x/3.x 有一个初始实现。
  • .NET Framework 4.x 使用不同的实现。
  • Mono 等其他实现使用自己的结构。

最重要的是,.NET Core 甚至没有 GAC。

因此,C# 编译器的引用搜索算法不能依赖 GAC 的实现。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-25
    • 1970-01-01
    • 2011-08-24
    相关资源
    最近更新 更多