2011-12-19 38 views
4

我創建了幾個使用我自己的DLL的小應用程序。問題是,這個DLL不斷變化。我目前解決這個問題的方法是在創建和註冊DLL的類庫解決方案中有一個安裝項目。在我的所有應用程序中,我必須打開解決方案並重新引用新創建的/註冊的DLL。 Then我必須重新編譯他們的安裝項目,卸載舊的應用程序,然後重新安裝新的應用程序。如何部署一個不斷變化的DLL?

必須有更好的方法,我只是不確定,因爲我對這一切都很陌生。我已經看過ClickOnce,但我認爲這不會解決我的問題,因爲我無法發佈類庫。我已經考慮過檢查版本號,但是我必須做一些錯誤的事情,因爲它也行不通。

我明白,一旦DLL被創建並在應用程序中使用,它應該基本上不會被觸及。在這種情況下我沒有這個選擇。它不斷更新。完成。

那麼,有沒有更好的方法?在指南或相關的問題/答案/論壇的方向點將不勝感激。

編輯:DLL在運行時不會不斷變化,但它不斷髮展以允許其他應用程序中的更多功能和細節。另外,我想我應該提到的一件大事是公共接口不斷變化 - 通常會增加新的方法。

+0

你有一個在運行時不斷變化的dll嗎? – Daryl 2011-12-19 16:47:08

+4

DLL中有什麼變化?如果只是內部實現(不改變公共接口),你可以直接替換DLL而不需要重新編譯所有東西 – 2011-12-19 16:47:31

+0

你的dll是否已經簽名,如果是,你是否也會不斷地更改其版本號?如果是這樣,只需保留版本號。以上所有步驟都可以通過cmd腳本完成,因此可能只是自動執行當前流程。 – 2011-12-19 16:51:50

回答

5

確保對DLL的引用指定SpecificVersion = false。然後,只需將每個新版本部署到GAC中即可實現。 最終,您還可以使用Binding Redirection手動強制版本。

+0

這是一個很好的解決方案。確切地說OP是想要的。其他解決方案(如NuGet)需要重新編譯和重新部署其他項目。 – Shiroy 2016-06-17 16:31:16

1

您可以嘗試的解決方案是針對您的項目使用單一解決方案,並在項目需要的任何地方參考該項目。

0

退房NuGet

你可以建立一個內部的NuGet庫(實際上只是存儲nupkg文件的文件夾。)然後,當你建立一個新的DLL,您可以根據需要進行更新工作室的應用程序。這將確保它具有最新版本。除非您正在修復的DLL中存在錯誤,否則它們不應該需要重新部署。

0

一種解決方案是如下:

  • 物理接口從實現分離。例如AssemblyA是接口,應用程序(AssemblyB說)在編譯時只知道接口。實現(AssemblyC)當然也知道/引用AssemblyA。問題是AssemblyB沒有引用AssemblyC。這將需要您使用IoC容器(如MS Unity 2.0,但還有許多其他容器),以便在運行時解析和實例化混凝土。
  • 編寫一個發現新AssemblyC.dll的更新過程,替換本地副本,並使用反射和IoCContainer一起以任意間隔「加載」新實現,通常是應用程序啓動。

上面依賴於你的接口是穩定的。如果不是,你可以寫一個(更)穩定的Facade