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

.net 为什么没有记录GAC文件夹结构?,.net,documentation,clr,assemblies,gac,.net,Documentation,Clr,Assemblies,Gac,为什么没有记录GAC文件夹结构 我正在通过C#阅读CLR,书中指出: CSC.exe不在GAC中查找引用的程序集的原因是您必须 知道程序集文件的路径,并且GAC的结构未记录 我无法理解在为GAC文件夹结构创建规则和记录规则时存在哪些障碍 更新 在评论中,有人建议可能存在一个技术问题,不允许实施文件夹结构的规则。但我可以通过提供一个可能规则的例子来证明情况并非如此: 1 GAC只能包含强命名程序集。 2根据定义,强名称程序集是一个具有名称、版本号、区域性和公钥令牌(实际上是公钥,但为了简单起见,我

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

我正在通过C#阅读CLR,书中指出:

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

我无法理解在为GAC文件夹结构创建规则和记录规则时存在哪些障碍

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

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


我在这里遗漏了什么吗?

最初的.NET标准文档只定义了GAC的功能,但没有限制其实现。所以,

  • .NETFramework 2.x/3.x具有初始实现
  • .NET Framework 4.x使用不同的实现
  • 像Mono这样的其他实现使用它们自己的结构
最重要的是,.NETCore甚至没有GAC


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

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