2009-06-18 47 views
2

我已經閱讀了一些關於GAC的文章,以及爲什麼您不應該通過將共享程序集安裝到GAC中來部署應用程序。我可以看到這一點,因爲它可以使更新客戶機上的應用程序變得更容易。將共享程序集安裝到GAC中進行開發和構建

但是,有兩個方面我可以看到GAC在開發和構建服務器時非常有用。例如,如果您使用Microsoft應用程序塊,則可以將它們安裝到GAC中並在其中引用它們。這是有道理的,因爲這樣做比對每個開發人員計算機上的路徑的絕對引用更容易。它比擁有共享網絡驅動器和所有共享組件的效果還要好 - 那裏已經完成了。

然後,你可能會爲你的構建服務器做同樣的事情。然而,我看到的唯一問題是,您有一個使用應用程序塊版本2.0的應用程序。稍後,您將其升級到使用版本3.1。在某些情況下,您可能需要重新創建該應用程序的早期版本,以測試客戶找到的錯誤,但是當您重新創建構建時,它將選擇應用程序塊的版本3.1而不是最初構建的2.0版本。這是真的,還是舊的項目文件仍然參考舊版本的dll,只要它在GAC中?

你對這個特殊點有什麼想法/意見?

我希望能夠將所有版本的共享組件(我們可以下載或構建)作爲安裝到GAC中的MSI分發給所有開發人員,並將'XCOPY'作爲應用程序安裝程序的一部分部署到客戶機器上。這是做到這一點的最佳方式。

+0

我認爲這個問題現在已經被Nuget照顧到了。所以我不再認爲這個問題是相關的 – 2011-04-05 07:50:58

回答

0

舊應用程序將從GAC中選擇較舊版本的程序集,前提是您不用較新的程序集重建舊應用程序。每個程序集都會將這些信息保存在自己的清單中,指出它引用了哪些程序集。如果使用ILDasm tool打開裝配體,則可以詳細檢查裝配體的清單,該裝置體可保存所有引用裝配體的信息。

+0

對於商業軟件組件,[程序集重定向策略](http://msdn.microsoft.com/en-us/library/7wd6ex19(v = VS.90).aspx)應該是用於確保將來可以交付重要的錯誤修復。 (做生意只是另一筆費用。) – rwong 2011-07-25 16:49:17

2

你對這個特殊點有什麼想法/意見?

我總是將主要的二進制文件保存在.NET軟件項目的資源/庫文件夾中。顯然這個文件夾是版本化的。無論如何,存儲便宜,所以它沒有太大的區別。

這有幾個目的:

  • 項目是原子,他們不依賴於具有在GAC一些庫的具體版本。所以很容易通過簡單地檢查出來再現一些以前的版本。一切都會奏效。
  • 它只需要一個乾淨的開發機器(當然安裝了所有的.NET服務包和主要的SDK),以便開始簽出項目,運行完整的集成構建並開始工作。

當有超過10個不同的項目要管理,這開始有所作爲。

+0

我可以看到你關於原子項目的觀點,並且可以很容易地重現以前的版本。但它確實給開發人員帶來了一個負擔,以確保他們獲得正確的程序集版本。我認爲這種方法在使用源代碼控制作爲檢入時也存在問題,潛在的合併程序集可能會留給開發sam項目的開發人員,但使用不同版本的共享程序集來覆蓋正確的版本。至少通過項目引用,您可以在合併期間看到程序集版本號。 – 2009-06-22 13:31:51

相關問題