Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
859 views
in Technique[技术] by (71.8m points)

visual studio 2017 - .NET Core Dependency Tree

Is it possible to view dependencies for a project in a .net core application? I'm using Visual Studio 2017 Professional.

At the moment I have the following nugget packages referenced in my csproj.

<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>

Where you can navigate dependencies.

dependencies

But it makes it hard to find a particular dependency - a tree is good if you know what you are looking for. Is there a way to output a flat list of dependant assemblies and there versions?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

You can add an msbuild target to your project file (inside the <Project> element) like this:

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

Which you can call like this (a line without a parent package name means it is referenced by the project directly):

$ 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
  …

If you wanted a "reverse dependency tree" - a list of packages and which packages reference them - you can do something similar to:

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

which produces the following output:

$ 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
  …

There isn't really documentation about these items, but they have "public" name and are generated by the ResolvePackageDependencies task which is executed as part of the RunResolvePackageDependencies target and produces a few very useful items: TargetDefinitions, PackageDefinitions, PackageDependencies, FileDependencies and DiagnosticMessages.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...