2014-02-07 70 views
1

首先,我將描述我們的設置(這是一個非常簡化版的企業開發流程)。我們開發了一個.NET應用程序,它依賴於一些共享組件。共享組件通常與應用程序一起開發。我們希望將這些共享組件轉換爲NuGet包。消費積極開發的NuGet包

因此,我發佈了包A的1.0.0.4版本,並且希望在我的應用程序中使用它。我的packages.config看起來像這樣。

<package id="A" version="1.0.0.4"/> 

到目前爲止這麼好。我可能會在此時將packages.config提交到版本控制,以記住我的依賴關係。現在我運行包A的下一個版本,它發佈了版本1.0.0.5。現在我希望我的應用程序自動將更新包A更新到1.0.0.5之前的版本。

但是,我的軟件包配置現在包含一個確切版本1.0.0.4,它的版本控制。我的問題是:

  • 我可以以某種方式指定我想在軟件包配置中使用版本1.0或更高版本嗎?換句話說,我可以避免每個包的每個新版本都更改packages.config嗎?
  • 我可以以某種方式更新構建之前的依賴項到最新的版本?我可以使用腳本自動執行嗎?

我很新的的NuGet,我來自螞蟻+常春藤/ Maven的世界裏,這個功能kinid的自動的,所以我仍然希望我缺少的NuGet東西很明顯,雖然通過討論掃描在stackoverflow聽起來不太令人鼓舞。

我找到了Using Nuget in development environment - best practices/how toHow to automatically update NuGet packages to latest available versionNuGet issues with packages.config, project references and the solutionwide packages folder,但沒有給出明確的答案。

回答

0

我不認爲你可以改變packages.config隱含允許更高的版本。此外,項目文件還引用了包含路徑中軟件包版本的軟件包文件夾,因此需要在軟件包更新後對其進行更改。

您可以通過運行nuget update來更新packages.config和項目文件。

您可以在夜間生成中自動執行此操作,並檢查生成的更改。然而,這是否是一個好主意值得商榷。至少,您應該通過運行構建來關閉更新操作,以確保新版本不會導致構建中斷。

+0

我們傾向於做這樣的事情。但是,我們的軟件包每天更新一次以上,所以更新腳本需要在每次提交時運行。我希望有一個更簡單的解決方案。 – batusek

0

可以使用allowedVersions屬性的範圍內自動使用新包版本,就像這樣:

<packages> 
    <package id="SomePackage" version="2.1.0" allowedVersions="[2,3)" /> 
</packages> 

在這個例子中,從2.x系列的所有程序包將被使用,而不是從3.x系列。對於這種情況,你可以更具體一些。 `allowedVersions =「[2.1,2.4]」,如果你想從2.1,2.2,2.3而不是2.4獲取任何包。

查看http://docs.nuget.org/docs/reference/versioning瞭解更多詳情

+0

恕我直言,這是不可能的。這個鏈接說** ** nuspec **語法_not_關於** packages.config **語法。因此,packages.config中不允許allowedVersions屬性。 – batusek

+0

絕對可以在packages.config中指定'allowedVersions':「NuGet支持通過使用allowedVersions屬性手動編輯packages.config文件來限制軟件包可以升級到的版本範圍。」 http://docs.nuget.org/docs/reference/versioning#Constraining_Upgrades_To_Allowed_Versions 我一直在使用這個2+年:) –

+0

@MatthewSkelton你可以舉一個例子,你的packages.config和.csproj文件看起來像什麼時候像這樣消費包裹?我試圖實現一些非常類似於我們使用NuGet包的每晚構建的東西,並且無法使其正常工作。 – jameswelle