2009-12-16 108 views
5

我必須向GAC部署少量程序集。我剛剛有幾個關於(我)瞭解GAC的問題。真讓我困惑。GAC和彙編版本

我想知道更改程序集和文件版本的版本。 GAC dll將被安裝應用程序取代的可能組合中有哪些。和GAC文件的基本管理。

我會使用更好的瞭解GAC的下面的例子說明我的問題:

假設我有產品A和B。

A和B均指在GAC中安裝的myfile.dll。
(ⅰ)集版本:[1.0.0.0]
(ⅱ)組件文件版本:[2.0.0.0](有意不同,以避免更多的混亂)

  1. 假設我有施加一個錯誤修復在myfile.dll中。 然後我應該更改哪個版本?

  2. 假設我有一個說'ANEW'的新版本,那麼應該更改哪個版本,以便A,B ANEW都可以並排居住的 。

  3. 假設如果我在'G'中安裝了myfile.dll,現在我嘗試安裝 'B',它具有錯誤修復的gac dll ..然後哪些版本要更改以便更改反映在'一個'。

  4. 與Q3相同,但B的變化不應該反映在'A'中。

  5. 假設'A'與myfile(1.0.0.0)一起安裝。現在假設'B'正在安裝 myfile(1.x.y.z).. GAC文件將被替換?

  6. 假設'A'與myfile(1.0.0.0)一起安裝。現在假設'B'與 myfile(2.x.y.z)一起安裝.. GAC文件將被替換?

  7. 假設'A'與myfile(1.0.0.0)一起安裝。現在假設'B'與 myfile(1.0.0.0)一起安裝,假設版本沒有改變.. GAC文件將被替換?

  8. 此外,GAC dll如何刪除。是否有任何刪除標準?

我想問題有點混亂,但希望你們知道我在問什麼。

PS:此主題相關net-assembly-dll-sharing-and-deploying

回答

4

1)要看你做什麼樣的變化來修正錯誤。如果您更改任何公共接口或對行爲進行重大更改,我會碰撞程序集版本號。如果不是的話,你可以做微軟只爲該文件提供的版本。

2)彙編版本就是GAC關心的一切。所以,如果你想要兩個相同名稱的程序集並排居住,它們必須根據程序集版本而有所不同。

3)我可能會更改程序集版本號,幷包含發佈者策略以將舊版本的客戶端重定向到新的版本。

4)與3相同,但不包括髮布者策略,或者配置A繞過它。

5)& 6)不,它是並排安裝的。

7)我不這麼認爲,但它可能取決於它們是否在文件版本上有所不同。我相信你可以嘗試驗證。

8)有可能被用來防止意外移除的參考文獻。 MSI使用它,所以如果您使用MSI進行安裝,它會跟蹤對程序集的引用,並且在所有應用程序卸載之前不會將其刪除。如果你手動操作(比如使用Gacutil/uf),你可以把事情搞砸。

+1

thx for answer。 我也發現此鏈接 http://blogs.msdn.com/junfeng/archive/2004/02/14/72666.aspx 「當我們看到程序集已經存在於GAC中時,我們嘗試比較文件版本GAC中的程序集(我們稱之爲「舊」程序集)以及程序集的文件版本即將安裝(和「新」程序集)。如果「新」程序集的文件版本低於「舊」程序集,我們將拒絕安裝「新」程序集,除非您要求融合強制安裝(「gacutil -if」)。「 – Amitd 2009-12-18 05:35:25

+1

經過這個答案和一些研究..我得到了答案,thx你:) [a]並行安裝在GAC中總是改變彙編版本。 [b]錯誤修復總是改變彙編文件版本。 [c]如果相同的程序集版本,舊版本的文件總是被更新的版本所取代。 [d]強制用舊文件版本(給定相同的程序集版本)替換新文件版本在gacutil中使用強制標誌。 – Amitd 2009-12-20 06:57:41