.NET Core 依赖树

问题描述 投票:0回答:5

是否可以在 .NET Core 应用程序中查看项目的依赖关系?我正在使用 Visual Studio 2017 Professional。

目前我的

csproj
中引用了以下 Nuget 包。

<ItemGroup>
    <PackageReference Include="Microsoft.ApplicationInsights.AspNetCore" Version="2.0.1" />
    <PackageReference Include="Microsoft.AspNetCore" Version="1.1.2" />
    <PackageReference Include="Microsoft.AspNetCore.Authentication.Cookies" Version="1.1.2" />
    <PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="1.1.2" />
    <PackageReference Include="Microsoft.AspNetCore.Identity" Version="1.1.2" />
    <PackageReference Include="Microsoft.AspNetCore.Mvc" Version="1.1.3" />
    <PackageReference Include="Microsoft.AspNetCore.StaticFiles" Version="1.1.2" />
    <PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="1.1.2" />
    <PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="1.1.2" />
    <PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer.Design" Version="1.1.2" />
    <PackageReference Include="Microsoft.Extensions.Logging.Debug" Version="1.1.2" />
    <PackageReference Include="Microsoft.VisualStudio.Web.BrowserLink" Version="1.1.2" />
    <PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="1.1.1" />
    <PackageReference Include="SimpleInjector.Integration.AspNetCore.Mvc" Version="4.0.8" />
</ItemGroup>

您可以在其中导航依赖项。

但这使得找到特定的依赖项变得很困难 - 如果您知道自己在寻找什么,那么树是很好的选择。有没有办法输出依赖程序集及其版本的平面列表?

visual-studio .net-core visual-studio-2017
5个回答
28
投票

您可以将 msbuild 目标添加到项目文件(在

<Project>
元素内),如下所示:

<Target Name="PrintAllReferences" DependsOnTargets="RunResolvePackageDependencies">
  <Message Importance="high" Text="Referenced package: %(PackageDefinitions.Identity)" />
</Target>

你可以这样调用(没有父包名称的行表示它被项目直接引用):

$ dotnet msbuild /nologo /t:PrintAllReferences
  Referenced package: Microsoft.NETCore.Platforms/1.1.0
  Referenced package: Microsoft.NETCore.Targets/1.1.0
  Referenced package: Microsoft.Win32.Primitives/4.3.0
  Referenced package: NETStandard.Library/1.6.1
  Referenced package: runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0
  Referenced package: runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0
  Referenced package: runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0
  Referenced package: runtime.native.System/4.3.0
  Referenced package: runtime.native.System.IO.Compression/4.3.0
  Referenced package: runtime.native.System.Net.Http/4.3.0
  Referenced package: runtime.native.System.Security.Cryptography.Apple/4.3.0
  Referenced package: runtime.native.System.Security.Cryptography.OpenSsl/4.3.0
  Referenced package: runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0
  Referenced package: runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0
  Referenced package: System.Buffers/4.3.0
  Referenced package: System.Collections/4.3.0
  …

如果您想要一个“反向依赖树” - 包列表以及哪些包引用它们 - 您可以执行类似以下操作:

<Target Name="PrintPackagesAndParents" DependsOnTargets="RunResolvePackageDependencies">
  <Message Importance="high" Text="* %(PackageDependencies.Identity) referenced by:%0a^---@(PackageDependencies->'%(ParentPackage) - target %(ParentTarget)', '%0a^---')" />
</Target>

产生以下输出:

$ dotnet msbuild /nologo /t:PrintPackagesAndParents
  * JetBrains.Annotations/10.2.1 referenced by:
  ^--- - target .NETStandard,Version=v1.3
  * System.IO.FileSystem.Primitives/4.0.1 referenced by:
  ^---NETStandard.Library/1.6.0 - target .NETStandard,Version=v1.3
  ^---System.IO.Compression.ZipFile/4.0.1 - target .NETStandard,Version=v1.3
  ^---System.IO.FileSystem/4.0.1 - target .NETStandard,Version=v1.3
  ^---System.Xml.ReaderWriter/4.0.11 - target .NETStandard,Version=v1.3
  * System.Linq/4.1.0 referenced by:
  ^---NETStandard.Library/1.6.0 - target .NETStandard,Version=v1.3
  ^---System.Security.Cryptography.Encoding/4.0.0 - target .NETStandard,Version=v1.3
  * System.Linq.Expressions/4.1.0 referenced by:
  ^---NETStandard.Library/1.6.0 - target .NETStandard,Version=v1.3
  * System.Net.Http/4.1.0 referenced by:
  ^---NETStandard.Library/1.6.0 - target .NETStandard,Version=v1.3
  * System.Net.Primitives/4.0.11 referenced by:
  ^---NETStandard.Library/1.6.0 - target .NETStandard,Version=v1.3
  ^---System.Net.Http/4.1.0 - target .NETStandard,Version=v1.3
  ^---System.Net.Sockets/4.1.0 - target .NETStandard,Version=v1.3
  …

没有关于这些项目的真正文档,但它们具有“公共”名称,并由 ResolvePackageDependency 任务生成,该任务作为 RunResolvePackageDependency 目标的一部分执行,并生成一些非常有用的项目:

TargetDefinitions
PackageDefinitions
PackageDependencies
FileDependencies
DiagnosticMessages


6
投票

今天在

Morning Brew
中闪现,可能值得一看:

Martin Bjorkstrom Dotnet 取决于


5
投票

实际上,您可以在 Visual Studio 中轻松搜索特定项目的依赖关系。

只需右键单击“依赖项”,选择“范围到此”。然后就可以直接搜索依赖关系了。


2
投票

在搜索栏的下拉列表中,勾选

Search within file contents
Search within external items
,然后输入要搜索的包,以查看该包的依赖关系树


0
投票

您可能会发现直接解析

dotnet list package
命令的输出更容易:

dotnet list package --include-transitive

它仍然分隔每个 csproj,但它将它们保持在一个“级别”中,并且文本可能更容易解析:

dotnet list package --include-transitive

Project 'TestApp' has the following package references
   [net6.0]:
   Top-level Package         Requested             Resolved
   > System.CommandLine      2.0.0-beta1.21308.1   2.0.0-beta1.21308.1

   Transitive Package      Resolved
   > Crayon                2.0.62
   > SomeDep               1.0.0
   > Microsoft.CSharp      4.4.1
   > AnotherDep            1.0.0
   > System.Memory         4.5.4

// ...
© www.soinside.com 2019 - 2024. All rights reserved.