【发布时间】: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