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.
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?
ASP.NET Core supports the dependency injection (DI) software design pattern, which is a technique for achieving Inversion of Control (IoC) between classes and their dependencies. For more information specific to dependency injection within MVC controllers, see Dependency injection into controllers in ASP.NET Core.
In . NET Core, the dependencies managed by the container are called services. You have two types of services: Framework services: these services are part of the . NET Core framework; some examples of framework services are IApplicationBuilder , IConfiguration , ILoggerFactory , etc.
Dependency diagrams for . NET Core projects are supported starting Visual Studio 2019 version 16.2. On the Architecture menu, choose New Dependency Diagram. Under Templates, choose dependency diagram.
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
.
This flashed up today in the Morning Brew
which might be worth a look:
Martin Bjorkstrom Dotnet Depends
You can actually search through dependencies of particular project quite easily in Visual Studio.
Just right click on Dependencies, select "scope to this". And then you can directly search through dependencies.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With