如何更新未通过NuGet作为PackageReference直接引用的依赖关系?

问题描述:

该问题类似于描述的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谢谢你的回答,它是有效的,但不幸的是没有完全达到目标。为了更新依赖关系,我仍然需要手动完成整个树。所以,没有一键更新的平板清单。 –

不可能的时刻,但讨论是Github开放。

那么,有没有一种简单的方法来从两个世界中获得最好的?

我觉得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