关于 GAC 目录
来源:互联网 发布:python内存管理机制 编辑:程序博客网 时间:2024/05/23 21:21
0. 什么是 GAC ?
全局程序集缓存 http://msdn.microsoft.com/zh-cn/library/yf1d93sz(VS.80).aspx
1. GAC 在哪里?
C:/Windows/Assembly
2. 这个目录怎么如此Ugly?
其实 C:/Windows/Assembly 是一个实实在在的文件目录,鉴于该目录的特殊性,装了.NET之后,默认对该目录启用了一个 Explorer Shell,提供特殊的视图
3. 为什么常有人提到 C:/Windows/assembly/GAC 目录,而我却看不到?
你可以用 dir 命令查看真实结构:
或者直接输入 C:/Windows/assembly/GAC
4. 怎么又有这么多子目录?
见 Shiny Zhu 在 http://social.microsoft.com/forums/zh-CN/netframeworkzhchs/thread/281edc5d-bc84-43a4-a409-74bf5992c827/ 所述:
GAC 目录是结构化的,是用一个算法管理子目录的名称,是系统自动管理的,永远不要采用手工方式将程序集复制到 GAC 目录.一个比较完整的.NET Framework 2.0的GAC下子目录的结构如下所示:C:/WINDOWS/Assembly/GACC:/WINDOWS/Assembly/GAC_32C:/WINDOWS/Assembly/GAC_MSILC:/WINDOWS/Assembly/GAC_64C:/WINDOWS/Assembly/NativeImages1_v1.1.4322C:/WINDOWS/Assembly/NativeImages_v2.0.50727_32C:/WINDOWS/Assembly/NativeImages_v2.0.50727_64其中:GAC是用于存放基于.NET Framework 1.0/1.1创建的Assemblies,这些Assemblies只能运行在32-bit 地址空间。GAC_MSIL用于存放基于.NET Framework 2.0上的无特定CPU指定的Assemblies,这些assemblies可以运行在32-bit地址空间或者64-bit地址空间。GAC_32也是用于存放基于.NET Framework 2.0创建的基于x86架构的Assemblies,因为这些Assemblies可以拥有32-bit的native CPU代码,所以只能运行在32-bit空间,可以直接在32-bit系统上运行或者使用WOW64技术在64-bit的OS系统上运行。GAC_64用于存放.NET Framework 2.0上创建的基于x64或者IA64的Assemblies,这些Assemblies可能含有x64或者IA64的Native Code,所以他们只能运行在64-bit地址空间上。这个目录在32-bit的OS上不存在。值得注意的是,GAC_64中的Assemblies是根据系统架构决定,在x64系统上,该目录中的Assemblies就必须是基于x64的,IA64的Assemblies无法被装入,反之亦然。以NativeImages开头的目录存放的通过NGen.exe编译assembly生成的基于当前平台的非managed代码,这个目录不需要Strongly named Assemblies,后面的数字对应了版本号。而基于.NET Framework 2.0的两个NativeImages目录名称最后的两个字符’64’和’ 32’则代表了对应的平台。
5. 上面2中提到的 Shell,到底是什么?
见 MSDN 程序集缓存查看器 (Shfusion.dll) http://msdn.microsoft.com/zh-cn/library/34149zk3(VS.80).aspx
这个 dll 存在于:c:/windows/microsoft.net/framework/v<version>/shfusion.dll
6. 如果我决定抛弃这个 Shell 呢?你知道,我可是.NET高手呢
那就卸载吧:
C:/Users/Administrator>regsvr32 /u c:/windows/microsoft.net/framework/v2.0.50727/shfusion.dll
虽然你是高手,还是老老实实还原吧,是人就会犯错滴:
C:/Users/Administrator>regsvr32 c:/windows/microsoft.net/framework/v2.0.50727/shfusion.dll
7. 如果我要从 GAC 偷某些 dll 出来怎么办?
a. 如上2所述,用 dir 命令进入 dll 的所在目录,注意其 version+publictoken 的子目录,用 copy 命令
b. 如上6所述,暂时抛弃 shfusion,就可以看到其庐山面目啦
8. 如果我要 Debug GAC 的dll 怎么办?
这个问题的关键是 Debug Symbol!
部署 dll 同时部署 pdb(注意版本一致),如何部署通过上面 7 就知道了
- 关于 GAC 目录
- GAC 结构化目录
- 关于GAC的学习
- NET Framework GAC目录构造
- GAC
- GAC
- GAC
- GAC
- GAC
- GAC
- 再谈CLR:GAC目录的构造
- 再谈CLR:.NET Framework GAC目录构造
- C# 注册DLL 到 GAC 目录
- 学习.NET (3) Inside GAC --浅析GAC目录架构在不同CPU平台上的工作原理
- GAC中的所有的Assembly都会存放在系统目录"%winroot%/assembly下面
- 名词解释 GAC
- .Net GAC
- GAC注册
- 如何将服务端的多个文件打包下载(转)
- 如何捕获 SharePoint 2007/2010 的 403 Forbidden 的真实错误
- linux 下 CollabNetSubVersion 的安装与配置
- 构造函数的问题
- c++ 基本函数。。。
- 关于 GAC 目录
- .NET 如何访问环境变量
- proc文件系统剪辑
- 最长递增子序列 O(NlogN)算法
- ASP.NET 安全结构
- [图解] 你不知道的 JavaScript - “this”
- boost 线程的创建与等待
- 起点中文网乘“盛大”之势打通产业供应链
- PostMessage和SendMessage的区别