2015-09-22 68 views
9

我們正在開發一個WPF應用程序,它具有各種「常見」依賴項(Unity,Prism等)。有沒有一種巧妙的方式來處理NuGet中的包依賴關係?

當添加新項目,然後爲每個項目設置NuGet程序包依賴關係時都很好,但是當涉及到升級時,真的很痛苦,因爲這意味着我們必須通過每個項目,刪除舊的參考,然後從NuGet重新獲取最新的軟件包。例如,今天我的任務是將Prism從5.0升級到6.0(它總是有重大變化),這意味着,除了修復所有必須經歷每個項目的命名空間衝突等之外,刪除舊的參考文獻,添加新的依賴關係並沖洗並重復。

我的問題是,有沒有更聰明的方法來處理這個問題,或者這是標準的方法?

很多感謝,

更新:

我最關注的「重大」的升級不上包管理器顯示出來。版本5.0 - > 6.0升級將被視爲主要升級,因此不會在NuGet包管理器中應用自動更新。

我不希望NuGet能夠自動執行此操作,因爲此類升級可能(並且經常會)包括突破性更改,但我想知道是否有辦法以較輕鬆的方式執行主要升級而不是刪除每個項目的項目和packages.config的引用,然後使用NuGet重新添加它們。對於一個相對較大的項目,這非常耗時,我想知道是否有人有更好的方法來管理這種依賴關係。

+0

我認爲你還沒有和VS2015一起工作過......你使用的是哪個版本的Visual Studio? –

+0

@ DeblatonJean-Philippe 2013.我很想升級到2015年,但不幸的是目前這還不可行(公司許可證等) – kha

+0

@kha(更新後)我不確定自己理解。我已經通過NuGet Package Manager對Entity Framework進行了從v5.0.0到v6.1.3的重大更新,並且確實發生了重大更改,所以我必須修復這些更改。 app.config/web.config文件中的引用會自動更新,我所要做的只是更改using語句中的一些命名空間問題。 – djm61

回答

3

如果您像您說的那樣使用VS2013,您可以通過右鍵單擊解決方案並選擇「管理NuGet軟件包解決方案」來管理所有NuGet軟件包。這將彈出一個對話框,您可以查看爲解決方案中的所有項目安裝的所有軟件包以及所有可用更新的軟件包。當你升級軟件包時,VS負責所有需要的引用更改。如果軟件包發生了重大變化,那麼您仍然需要解決這些問題。免責聲明:我從來沒有在WPF項目/解決方案上工作,但對於Web/Forms應用程序,NuGet包是這樣處理的。

+0

謝謝@ djm61。請在我原來的帖子中看到我的更新。 – kha

0

我可以理解你的痛苦,因爲我有類似你的問題,但沒有簡單的方法。但是當然你需要以不同的方式打破日常開發和依賴更新推出的過程。

對於我所從事的項目,我使用共享存儲庫路徑,在您工作的解決方案之間共享,並且您需要刪除所有解決方案文件夾引用才能獲得乾淨狀態。

對於每一個你的工作你需要修改指向共同的目標庫中的屬性組解決方案(我使用相對路徑)

一旦所有的東西設置,你其實可以用一個執行更新腳本(我使用python運行時腳本)

實際上你可以看一下setting up common nuget-packages-folder for reference updates詳細,但好像你在看的過程自動化

0

我不得不嘗試升級時,類似的問題在Xamarin Studio中有多個包含alpha通道問題的軟件包,這也沒有好處VS 2015 NuGet經理的聯繫。我最終寫了一個我每天跑多次的very simple PowerShell script

# 
# This script updates local ibGib NuGet packages for mobileGib Android app solution. 
# For convenience in copy+paste in manager console: 
# ../UpdateLocalNugetPackages.ps1 

Update-Package commonGib 
Update-Package ibGib 
Update-Package languageGib.Biz 
Etc. 

我相信你可以定製你的NuGet命令來滿足你的需求。

此外,萬一你不知道它,你一定要閱讀NuGet command line reference。我可能弄錯了,但聽起來你的場景可以通過Update命令來實現。

相關問題