【问题标题】:How to update dependencies not referenced directly as PackageReference via NuGet?如何通过 NuGet 更新未直接作为 PackageReference 引用的依赖项?
【发布时间】:2017-09-14 09:03:35
【问题描述】:

这个问题与here 描述的问题相似。

当使用“传统”风格的.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 中显示传递依赖更新

很遗憾,在文档中没有找到这样的功能。

那么,有没有一种简单的方法可以从两个世界中获得最佳效果?

【问题讨论】:

  • 我已经用更多信息更新了答案,你可以检查它是否对你有帮助。现在这个问题呢?请告诉我有关此问题的最新信息吗?
  • @Leo-MSFT 感谢您的回答,它是有效的,但不幸的是并没有完全实现目标。要更新依赖项,我仍然必须手动遍历整个树。因此,没有一键更新的平面列表。

标签: visual-studio nuget


【解决方案1】:

目前不可能,但可以在 Github 上进行讨论。

【讨论】:

    【解决方案2】:

    那么,有没有一种简单的方法可以从两个世界中获得最佳效果?

    我认为 NuGet 已经有了一种从两个世界中获得最佳效果的简单方法。

    当使用新的 Sdk 风格的 .csproj 项目时,你会注意到 Reference 中有一个传递依赖的树形结构:

    通过这种结构,我们不仅可以得到一个平面列表的存在还可以清楚地知道包之间的具体依赖关系。在“传统”风格的 .csproj 中,我们可以知道平面列表,但我们无法知道每个包之间的具体依赖关系。我们需要选择每个包,然后检查它的依赖关系。这很不方便。

    另外,我们一般不会去检查包本身,直接更新它的依赖,这样会带来很多依赖之间的冲突。当您使用新的 Sdk 样式时,NuGet 隐藏了每个包的所有依赖项,因此 NuGet 包管理器 UI 和项目文件 .csproj 看起来非常简单。

    如果你还想单独更新其中一个依赖,可以安装,nuget会提示你,你是从版本1更新到版本2:like,Autofac:

    在这种情况下,您可以通过 NuGet 更新未直接作为 PackageReference 引用的依赖项。

    更多详细信息,您可以参考以下博客:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多