本篇目錄
前言
之前使用ABP框架做項目時,由於之前電腦裝了預覽版的VS2015,因而附帶地也裝了.Net Framework 4.5.3 preview版,而且我的項目也是用的該框架,可是VS正式版出來后,該版本又沒有地方去下載,考慮到其他開發人員計算機上以后安裝不了該版本的開發包,所以最后我又將項目的框架改回到了.Net Framework 4.5.2,可是之前安裝的Nuget包都是針對.Net framework 4.5.3的,所以此時必須要重新安裝很多Nuget包。這就引申出來這篇博文了。
重裝一個安裝包很簡單,就是卸載一個安裝包,然后再安裝回和之前卸載的相同版本的安裝包。包含的這兩步可以用下面的命令來表示。但是最重要的是在使用它之前要能理解這條命令帶給項目的變化。
Update-Package –reinstall <packageName>
為何需要重裝安裝包?
- 項目重定位或升級:當項目重定位或者升級,如果安裝包由於目標框架的改變而要求重裝時,重裝安裝包是很有用的。在Nuget 2.7,當項目的目標框架改變時,隨后我們會立即獲得一個生成錯誤,這是在警告我們有些安裝包也可能需要重新安裝。對於項目升級,會在項目的升級日志中展示一個錯誤。
- 你破壞了項目:NuGet不會阻止你從已經添加的安裝包中移除一些東西,因此無心地修改一些安裝包安裝的內容是很容易的,這樣就可能破壞項目。這時,你可能需要回到當初完好的狀態。
- 安裝包升級破壞了項目:更新安裝包也可能破環項目。這種失敗通常是由於依賴包直接升級時造成的,或者因為其他的安裝包升級時造成了依賴包的升級。此時,你肯定想回到項目破壞前時依賴包的老版本狀態。
- 提升NuGet包開發周期:開發包的作者通常需要重裝相同版本的安裝包來測試一下它的表現,而Install-Package命令沒有提供可以強制重裝安裝包的‘-force’選項。
因此,Update-Package -reinstall就是為了滿足這些需求的。
何時需要重裝以及需要注意什么?
重裝安裝包看上去好像很簡單,但是,也可能很棘手,因為可能會受下面的因素影響,也可能會影響它們:
- 項目重定位或升級時,項目的目標框架改變了;
- 安裝包的依賴和它們的版本;
- 獨立的安裝包和它們的版本。
上面的這些情況會覆蓋在下面的細節中:
- 根據項目重定位的目標框架重裝安裝包:
- 簡單的情況,只需要使用Update-Package –reinstall
重裝安裝包就可以解決該棘手的問題了。安裝在舊的目標框架的安裝包會被卸載,然后相同的安裝包會再次安裝到該項目的當前框架中。 - 在某些情況下,可能會發生安裝包不支持新定位的目標框架的情況。
- 如果安裝包支持便攜的類庫且該項目定位到一個該安裝包不再支持的組合平台,那么它的引用在重裝安裝包之后將會丟失。
- 對於你正在直接使用的或者作為依賴安裝的包都可能遇到這個問題。你正在直接使用的安裝包支持新的目標框架而它的依賴不支持,這種情況也是可能的。
- 當重定位應用程序之后,如果提示生成錯誤或運行時錯誤,那么你可能需要返回到原來的目標框架或者搜索可以很好地支持新的目標框架的可替換的安裝包。
- 簡單的情況,只需要使用Update-Package –reinstall
- 當涉及到包的依賴版本時重裝安裝包:
- 大家都知道使用‘Update-Package –reinstall’重裝安裝包,相同版本的安裝包就會安裝。然而,對於包的依賴不是這樣的。要安裝的依賴包的版本取決於包依賴版本約束(如果提供了的話,如果沒有提供就是最新的)。而工作最好的包依賴的版本取決於你,使用下面之一即可:
- Update-Package –reinstall
,更新包依賴時要求修復問題 - Update-Package –reinstall
-ignoreDependencies ,更新包依賴時可能導致破壞。
- Update-Package –reinstall
- 如果Update-Package -reinstall命令使得依賴包回滾到比之前安裝的版本更舊,那么你可以使用Update-Package
把它更新到更新的版本。
- 大家都知道使用‘Update-Package –reinstall’重裝安裝包,相同版本的安裝包就會安裝。然而,對於包的依賴不是這樣的。要安裝的依賴包的版本取決於包依賴版本約束(如果提供了的話,如果沒有提供就是最新的)。而工作最好的包依賴的版本取決於你,使用下面之一即可:
- 當涉及獨立的版本時重裝安裝包:
- 不要感到吃驚, Update-Package –reinstall不會改變獨立安裝包的版本。但是要考慮獨立包的版本來決定是否應該對它重裝。