2016-08-25 180 views
3

最近在我們公司,我們決定將我們公司開發的庫文件上傳到專用的NuGet服務器。在版本號開始增長之前,一切似乎都沒有問題。使用我們的NuGet庫的解決方案停止正確構建,並且我們認爲版本控制是問題所在。Nuget依賴關係版本

下面是這種情況:

enter image description here

這是與包的參考圖(你可以看到他們彼此之間的參考資料)

1)在溶液小號你從私人的NuGet服務器安裝例如圖書館A,B,E所有版本號爲1.0.0.0

2)您在一個的變化,增加了它的版本號1.0.0.1

3)你從NuGet包管理器解決方案小號更新庫一個到版本1.0.0.1

4)你用的一個一個兩個版本盡頭了(1.0.0.1)和一個B,E(1.0.0.0)

5)在溶液小號,Visual Studio中(測試Ò n 2012,2015 Professional)顯示找不到該參考,並且希望重新安裝該軟件包。當你這樣做的時候,但是當你承諾下一個人的構建失敗時......

一些(醜陋的?)變通辦法不會將包引用爲NuGet,而是將引用嵌入到dll中。或在所有引用一個包去,更新它,改變它的版本,然後更新小號,女巫聽起來可怕的很多工作..

而且should't它只是因爲當你的參考著作一個NuGet包,你沒有指定特定的版本,但> =版本?

或者我們是否全都做錯了?

謝謝!

回答

3

在你的情況,也有解決問題的兩個方面,當相關程序包A升級到版本1.0.0.1。

  1. 重定向程序集版本的應用水平。 您可以手動編輯應用程序配置文件,以將應用程序使用的程序集的舊版本重定向到新版本。然後,應用配置文件中的示例配置代碼如下所示。詳細介紹有關重定向集版本,請參考:https://msdn.microsoft.com/en-us/library/7wd6ex19(v=vs.110).aspx#Anchor_2
<dependentAssembly> 
     <assemblyIdentity name="someAssembly" 
      publicKeyToken="32ab4ba45e0a69a1" 
      culture="en-us" /> 
     <bindingRedirect oldVersion="7.0.0.0" newVersion="8.0.0.0" /> 
    </dependentAssembly> 
  • 分配時打包NuGet包依賴關係範圍。 由於您的軟件包B依賴於軟件包A並且軟件包A的版本發生更改,因此可以使用以下代碼爲軟件包B的.nuspec文件中的軟件包A分配依賴性範圍。當您的解決方案S上安裝了較高版本的軟件包A時,軟件包B將使用安裝的較高版本。在你的情況下,當安裝包A 1.0.0.1時,包B將依賴於包A 1.0.0.1。
  • <dependencies> 
        <dependency id="Package A" version="[1.0.0.0, higher version)" /> 
    </dependencies>