首先我們先來了解一下,目前 GAC 做了什麼改變?為什麼要做這個改變?
在 .NET 4.0 ,GAC 有了更新!在.NET 2.0 / 3.5 ,GAC 的實體目錄在 C:\Windows\Assebly 這個目錄。而 .NET 4.0 ,則變更至 C:\Windows\Microsoft.NET\Assembly 下。
為什麼有這樣的區別呢?主要是因為 CLR 版本造成的, .NET 2.0 / 3.5 所使用的是相同的 CLR 2.0,所以沒有必要進行分割的動作。但是 .NET 4.0 使用的卻是 CLR 4.0,我們可以試想一種狀況,若沒有區別,我們將一個組件的.NET 2.0 及 .NET 4.0 的版本同時註冊到 GAC 中,會有什麼狀況呢?好一點的結果是,一律都會叫最新的組件,也就是.NET 4.0 的版本。所以呢,.NET 2.0 版本的程式就壞掉了。慘一點的狀況,因為分不出 CLR 的版本,所以都叫不起來,全部都壞掉了…
所以為了避免這種狀況, GAC 依 CLR 的版本進行分割,每個 CLR 版本的 GAC 都是獨立的,也都不會互相影響。換句話說,如果你註冊了一個 .NET 4.0 的組件,基本上,應該在 CLR 2.0 的GAC 裏是找不到的 ( C:\Windows\Assembly 目錄下)
好了,我們回過頭來說明如何將assembly 註冊到 GAC,以及如何進行反註冊?
- 最簡單的方式,用檔案總管開啟該目錄 (例如:C:\Windows\Assembly ),然後將要註冊的組件拖曳到該目錄裏就完成了。
- 使用 GACUtil.exe 進行註冊及反註冊的動作
GACUtil.exe /i xxx.dll
GACUtil.exe /u xxx (切記:不要加上 .dll - 這個指令,會將GAC 中所有叫這個名字的組件一律移除 )
若想特別指定某一個組件進行移除,最好的方式是把強式名稱的屬性全部都指定進去,例如:
GACUtil.exe /u xxx, Version=1.0.0.0, Culture=neutal, PublicKeyToken=… - 使用 GACUtil.exe 進行整批的註冊及反註冊
GACUtil.exe /il AssemblyList.txt
GACUtil.exe /ul UnRegisterAssemblyList.txt
其中
AssemblyList.txt的格式:一行列出一個要註冊的組件的檔案名稱,例如:
UnRegisterAssemblyList.txt 的格式:類似 AssemblyList.txt,只是每個檔案名稱都不需要加上 .dll ,例如:AAA.dll
BBB.dll
CCC.dll
AAA
BBB
CCC
0 意見:
張貼意見