如何追踪传递依赖的来源?

E-R*_*Riz 2 .net c# dependency-management nuget

在具有大量<PackageReference>依赖项的项目/解决方案中,可能很难找到被引入的传递依赖项的来源。例如,我的解决方案中没有任何项目直接引用 System.Data.SqlClient 包,但有些东西正在拉动它在传递。在具有大量直接包引用的大型解决方案或项目中,“手动”跟踪几乎是不可能的。

是否有任何现成的方法(例如,.Net CLI 命令的组合)可以在给定特定包的情况下找到并显示传递引用的来源?我使用 Rider,它有一些很棒的代码导航和“发现”类型的工具,但我找不到任何有助于我实现目标的东西。

注意:我也有 VisualStudio,如果它在某处内置了这个功能,我只需要一个指向哪里/如何的指针。

Kim*_*Kim 26

一个名为 的自定义工具dotnet depends非常适合查看反向依赖关系。

  • 安装:dotnet tool install --global dotnet-depends
  • 用法:dotnet depends .\MyProject.csproj

如果将鼠标悬停在传递包上,Visual Studio 中的 NuGet 6.3也会显示这一点。将鼠标悬停在显示传递包的来源


EM0*_*EM0 21

在 VS 中搜索对我来说不起作用,至少对像 System.Net.Http 这样的 BCL 包不起作用。有效的是在obj\project.assets.json中查找,其中列出了所有依赖项。

这是在树上搜索每个包的手动过程:在"dependencies"另一个包的节点下找到目标包,例如:

      "Some.Other.Package/1.0.0": {
        ...
        "dependencies": {
          ...
          "System.Net.Http": "4.3.4"
        }
      }
Run Code Online (Sandbox Code Playgroud)

...然后对该包重复(本例中为“Some.Other.Package”),直到到达直接引用的包。

https://github.com/jerriepelser-blog/AnalyzeDotNetProject有代码可以自动执行此操作,但我还没有尝试过。


imp*_*mps 5

该功能内置于最新的 Visual Studio 2019 中。

使用 Visual Studio 2019 Update 6,我可以看到如下内容:

解决方案资源管理器依赖关系树

请注意,您还可以通过在解决方案资源管理器中搜索来发现包。

解决方案资源管理器搜索

不幸的是,它在 NuGet 包管理器安装视图中尚不可用。

  • 我尝试过,但我认为它不是很全面,因为对于我试图追踪的特定包,它没有显示任何引用,除了在一个不依赖于我所在的项目中研究。 (2认同)