You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

咨询.NET DLL注册目录C:\Windows\assembly与C:\Windows\Microsoft.NET\assembly的区别

C:\Windows\assembly 与 C:\Windows\Microsoft.NET\assembly 的核心区别

嘿,这个问题问得特别实在——不少刚深入.NET部署的开发者都会被这两个目录绕晕,我给你把关键差异拆解明白:

1. 对应的.NET Framework版本范围

  • C:\Windows\assembly:这是.NET Framework 1.0到3.5版本的**全局程序集缓存(GAC)**存储位置。这个时期的GAC采用了特殊的合并视图,你在资源管理器里打开它时,看到的不是普通文件夹结构,而是一个专门的GAC管理界面,显示所有注册的强命名程序集及其版本、公钥令牌等信息。
  • C:\Windows\Microsoft.NET\assembly:从.NET Framework 4.0开始,微软重构了GAC的存储结构,这个目录就是新版GAC的家。它针对不同CPU架构拆分了子目录:GAC_32(32位程序集)、GAC_64(64位)、GAC_MSIL(与平台无关的中间语言程序集),你直接打开就能看到普通的文件夹层级,更直观。

2. 程序集加载逻辑

  • 旧版GAC(C:\Windows\assembly):仅被.NET Framework 3.5及更早版本的CLR(公共语言运行时)识别,应用会从这里加载共享的强命名程序集,避免重复部署。
  • 新版GAC(C:\Windows\Microsoft.NET\assembly):由.NET Framework 4.x及以上版本的CLR使用,4.x的CLR完全不会去旧GAC里找程序集,两者是完全隔离的——这也是为什么你可能会在两个目录里看到同名但不同版本的.NET DLL。

3. 日常使用场景

  • 如果你维护的是老项目(基于.NET 2.0/3.0/3.5),涉及到共享程序集部署,会用到C:\Windows\assembly,通常用旧版本的gacutil.exe来注册程序集。
  • 对于.NET 4.0及之后的项目,共享程序集要部署到C:\Windows\Microsoft.NET\assembly对应的子目录里,新版gacutil.exe也会默认把程序集放到这里。

另外补充一点:.NET Core/.NET 5+已经彻底抛弃了GAC机制,它们的程序集都是随应用部署或者通过NuGet管理,不会用到这两个目录啦。

内容的提问来源于stack exchange,提问作者Dominota

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 10:23:10