.NET程序集加载路径异常:VS与Process Explorer显示不一致
关于.NET 4.6.1程序集GAC加载路径的困惑解答
这确实是个容易让人摸不着头脑的细节,我来帮你拆解背后的原因:
GAC双路径的本质:MSDN的文档没错,.NET 4.0及以上版本引入了独立的新GAC路径
C:\Windows\Microsoft.NET\assembly,而旧版.NET(1.0-3.5)的GAC是C:\Windows\assembly。但.NET 4+的CLR并没有完全抛弃旧GAC,而是保留了对它的兼容性支持。VS模块窗口的“视觉假象”:VS的模块窗口显示的是逻辑加载路径,而非真实的物理文件路径。.NET 4+的CLR会将从旧GAC加载的程序集,在模块窗口中映射为新GAC的逻辑路径展示,这是为了统一.NET 4+环境下的路径呈现,但并不代表文件实际在那里。
Process Explorer和HAND的真实路径:这两个工具直接读取进程加载的文件的物理位置,所以显示的
C:\Windows\assembly才是程序集实际被加载的地方。这种情况通常发生在你的程序引用了针对旧.NET版本编译的系统组件(比如一些基础类库),这些组件仍然存放在旧GAC中,.NET 4.6.1的CLR会兼容加载它们。
简单来说:VS给你的是“逻辑上的归类路径”,而Process Explorer和HAND给你的是“真实的文件存储路径”,两者并不冲突,只是展示维度不同而已。
内容的提问来源于stack exchange,提问作者Varun Sharma
相关产品推荐
相关产品推荐

