2017-09-14 78 views
1

該問題類似於描述的here如何更新未通過NuGet作爲PackageReference直接引用的依賴關係?

當使用「遺產」式.csproj項目文件,我們有一個單獨的packages.config文件,其中所有依賴上市,其中包括傳遞的。當一個用戶安裝具有依賴關係的包時,這將啓用一個用例,然後決定可以手動更新哪些傳遞依賴關係。因此,好處是:

  • 依賴易於識別由於平面列表
  • 細粒度的控制存在過的所有依賴版本

例如,從的NuGet安裝Autofac.WebApi2.Owin後,我們有像this的圖片:

清晰可見的傳遞依賴關係可以非常容易地手動更新。

當使用新的SDK式.csproj項目的NuGet引用添加爲<PackageReference/>到項目文件本身和傳遞依賴由MSBuild的默默引用:

<Project Sdk="Microsoft.NET.Sdk"> 
    <PropertyGroup> 
    <OutputType>Exe</OutputType> 
    <TargetFramework>net462</TargetFramework> 
    </PropertyGroup> 
    <ItemGroup> 
    <PackageReference Include="Autofac.WebApi2.Owin" Version="4.0.0" /> 
    </ItemGroup> 
</Project> 

因此,更新傳遞依賴,一個人必須到

  1. 識別它們(例如,通過obj/project.assets.json
  2. 明確地添加他們的所有項目
  3. 執行更新

這有每次更新後以及在明知是幾乎不可能的每一個項目(!)傳遞依賴要做。

可能的解決方法:

  • 添加傳遞依賴的項目自動
  • 顯示傳遞依賴的更新中的NuGet GUI

不幸的是,沒有這樣的功能的文檔中被發現。

那麼,有沒有一種簡單的方法來從兩個世界中獲得最好的?

+0

我已經用更多的信息更新了答案,你可以檢查它是否對你有幫助。那麼這個問題呢?您能否讓我知道關於這個問題的最新信息? –

+0

@ Leo-MSFT謝謝你的回答,它是有效的,但不幸的是沒有完全達到目標。爲了更新依賴關係,我仍然需要手動完成整個樹。所以,沒有一鍵更新的平板清單。 –

回答

0

不可能的時刻,但討論是Github開放。

0

那麼,有沒有一種簡單的方法來從兩個世界中獲得最好的?

我覺得NuGet已經有了一個簡單的方法來從兩個世界中獲得最佳效果。

當使用新的Sdk風格。的csproj項目,你會發現,有傳遞依賴的參考樹結構:

enter image description here

在這種結構中,我們不僅可以得到一個平坦的列表中存在也可以清楚地知道具體的依賴包裹之間。在「傳統」風格的.csproj中,我們可以知道平面列表,但我們無法知道每個軟件包之間的特定依賴關係。我們需要選擇每個包,然後檢查它的依賴關係。這非常不方便。

此外,我們通常不會直接查看包並更新它的依賴關係,這會在依賴關係之間帶來很多衝突。當您使用新的Sdk風格時,NuGet會隱藏每個包的所有依賴關係,以便NuGet包管理器UI和項目文件.csproj看起來非常簡單。

如果你還是想單獨更新依賴的一個,你可以安裝它,的NuGet會提示你,你是更新包從版本1到版本2:喜歡,Autofac:

enter image description here

在在這種情況下,您可以更新不直接通過NuGet作爲PackageReference引用的依賴項。

欲瞭解更多詳細信息,你可以參考以下博客:

https://blog.nuget.org/20170316/NuGet-now-fully-integrated-into-MSBuild.html