Dependify is a tool to visualize dependencies in your .NET application. You can start dependify in serve
mode to visualize dependencies in a browser or use the CLI
if you prefer the terminal.
Package | Version | Description |
---|---|---|
Dependify.Cli |
CLI | |
Dependify.Core |
Core library | |
Dependify.Aspire.Hosting |
Aspire support |
Blogs:
- Explore .NET application dependencies by using Dependify tool
- Supercharge your Dependify tool with AI chat assistant
dotnet tool install -g Dependify.Cli
dependify serve $dev/path-to-folder/
You will see something like the following output in the terminal.
- Workbench ⚙️
- Dependency Explorer 🔎
- Chat (AI) 🤖
Workbench gives you high level overview of the dependencies in the solution.
workbench-demo.mp4
You can open the mermaid diagram right in the browser.
Dependency Explorer allows you to select the dependencies you want to see.
dependency-explorer-demo.mp4
Chat (AI) allows you to ask questions about the dependencies.
Here is how to run the Dependify with the OpenAI GPT-4 model.
dependify serve $dev/cap-aspire/ \
--endpoint https://api.openai.azure.com/ \
--deployment-name gpt-4o-mini \
--api-key <api-key>
dependify-ai-chat-demo.mp4
You can add Dependify.Web
as resource to your Aspire project.
Add the package to AppHost:
dotnet add package Dependify.Aspire.Hosting
Register via IDistributedApplicationBuilder
. Add the following code to your Program.cs
:
var builder = DistributedApplication.CreateBuilder(args);
var apiService = builder.AddProject<Projects.aspire_project_ApiService>("apiservice");
builder.AddProject<Projects.aspire_project_Web>("webfrontend")
.WithExternalHttpEndpoints()
.WithReference(apiService);
builder.AddDependify().ServeFrom("../../aspire-project/"); // <-- location of .sln file
builder.Build().Run();
See the samples/aspire-project for more details.
You can use the CLI for the automation or if you prefer the terminal.
dependify graph --help
USAGE:
dependify graph [OPTIONS] <COMMAND>
EXAMPLES:
dependify graph scan ./path/to/folder --framework net8
dependify graph show ./path/to/project --framework net8
OPTIONS:
-h, --help Prints help information
COMMANDS:
scan <path> Scans for projects and solutions and retrives their dependencies
show <path> Shows the dependencies of a project or solution located in the specified path
The command scan
will scan the folder for projects and solutions and retrieve their dependencies. The ouput can be in tui
or mermaid
format. The tui
or terminal user interface is the default output format.
dependify graph scan $dev/keycloak-authorization-services-dotnet/
Here is how to change the output format to mermaid
.
dependify graph scan \
$dev/keycloak-authorization-services-dotnet/ \
--exclude-sln \
--format mermaid \
--output ./graph.md
graph LR
Keycloak.AuthServices.Authentication.csproj:::project
Keycloak.AuthServices.Templates.csproj:::project
Blazor.Server.csproj:::project
GettingStarted.csproj:::project
AuthorizationGettingStarted.csproj:::project
AuthorizationAndCleanArchitecture.csproj:::project
Blazor.Client.csproj:::project
TestWebApi.csproj:::project
Keycloak.AuthServices.Authorization.csproj:::project
Keycloak.AuthServices.Common.csproj:::project
TestWebApiWithControllers.csproj:::project
Keycloak.AuthServices.Sdk.csproj:::project
WebApp.csproj:::project
Keycloak.AuthServices.Sdk.Tests.csproj:::project
AuthGettingStarted.csproj:::project
Keycloak.AuthServices.Common.Tests.csproj:::project
Keycloak.AuthServices.Authentication.Tests.csproj:::project
Keycloak.AuthServices.Aspire.Hosting.csproj:::project
ResourceAuthorization.csproj:::project
Keycloak.AuthServices.OpenTelemetry.csproj:::project
Keycloak.AuthServices.Authorization.Tests.csproj:::project
Keycloak.AuthServices.IntegrationTests.csproj:::project
Keycloak.AuthServices.Sdk.Kiota.csproj:::project
Blazor.Shared.csproj:::project
Keycloak.AuthServices.IntegrationTests.csproj --> Keycloak.AuthServices.Sdk.csproj
Keycloak.AuthServices.Common.Tests.csproj --> Keycloak.AuthServices.Common.csproj
AuthGettingStarted.csproj --> Keycloak.AuthServices.Authorization.csproj
ResourceAuthorization.csproj --> Keycloak.AuthServices.OpenTelemetry.csproj
Keycloak.AuthServices.Authorization.Tests.csproj --> Keycloak.AuthServices.Authentication.csproj
AuthGettingStarted.csproj --> Keycloak.AuthServices.Sdk.csproj
Keycloak.AuthServices.Authorization.csproj --> Keycloak.AuthServices.Common.csproj
WebApp.csproj --> Keycloak.AuthServices.Authorization.csproj
GettingStarted.csproj --> Keycloak.AuthServices.Authentication.csproj
ResourceAuthorization.csproj --> Keycloak.AuthServices.Sdk.Kiota.csproj
WebApp.csproj --> Keycloak.AuthServices.Common.csproj
Keycloak.AuthServices.Sdk.Kiota.csproj --> Keycloak.AuthServices.Common.csproj
AuthorizationGettingStarted.csproj --> Keycloak.AuthServices.Authentication.csproj
Keycloak.AuthServices.Authorization.Tests.csproj --> Keycloak.AuthServices.Authorization.csproj
ResourceAuthorization.csproj --> Keycloak.AuthServices.Authentication.csproj
Keycloak.AuthServices.Authorization.Tests.csproj --> Keycloak.AuthServices.Common.csproj
Keycloak.AuthServices.IntegrationTests.csproj --> Keycloak.AuthServices.Sdk.Kiota.csproj
Keycloak.AuthServices.Sdk.csproj --> Keycloak.AuthServices.Common.csproj
Blazor.Client.csproj --> Blazor.Shared.csproj
Blazor.Server.csproj --> Blazor.Shared.csproj
Keycloak.AuthServices.Authentication.Tests.csproj --> Keycloak.AuthServices.Authentication.csproj
Blazor.Server.csproj --> Keycloak.AuthServices.Authentication.csproj
AuthorizationAndCleanArchitecture.csproj --> Keycloak.AuthServices.Authentication.csproj
AuthorizationGettingStarted.csproj --> Keycloak.AuthServices.Authorization.csproj
Keycloak.AuthServices.Authentication.csproj --> Keycloak.AuthServices.Common.csproj
Keycloak.AuthServices.Sdk.Tests.csproj --> Keycloak.AuthServices.Sdk.csproj
ResourceAuthorization.csproj --> Keycloak.AuthServices.Authorization.csproj
Keycloak.AuthServices.IntegrationTests.csproj --> Keycloak.AuthServices.Authentication.csproj
AuthorizationGettingStarted.csproj --> Keycloak.AuthServices.Sdk.csproj
ResourceAuthorization.csproj --> Keycloak.AuthServices.Common.csproj
ResourceAuthorization.csproj --> Keycloak.AuthServices.Sdk.csproj
Blazor.Server.csproj --> Blazor.Client.csproj
Blazor.Server.csproj --> Keycloak.AuthServices.Authorization.csproj
TestWebApi.csproj --> Keycloak.AuthServices.Authorization.csproj
AuthGettingStarted.csproj --> Keycloak.AuthServices.Authentication.csproj
AuthorizationAndCleanArchitecture.csproj --> Keycloak.AuthServices.Authorization.csproj
Keycloak.AuthServices.Authentication.Tests.csproj --> Keycloak.AuthServices.Common.csproj
Keycloak.AuthServices.IntegrationTests.csproj --> TestWebApi.csproj
TestWebApiWithControllers.csproj --> Keycloak.AuthServices.Authorization.csproj
Keycloak.AuthServices.IntegrationTests.csproj --> Keycloak.AuthServices.Authorization.csproj
AuthorizationAndCleanArchitecture.csproj --> Keycloak.AuthServices.Sdk.csproj
WebApp.csproj --> Keycloak.AuthServices.Authentication.csproj
Keycloak.AuthServices.IntegrationTests.csproj --> Keycloak.AuthServices.Common.csproj
Keycloak.AuthServices.IntegrationTests.csproj --> TestWebApiWithControllers.csproj
classDef project fill:#74200154;
classDef package fill:#22aaee;
You can use the API to build your own tools.
dotnet add package Dependify.Core
var services = new ServiceCollection()
.AddLogging()
.AddSingleton<ProjectLocator>()
.AddSingleton<MsBuildService>();
var provider = services.BuildServiceProvider();
var locator = provider.GetRequiredService<ProjectLocator>();
var msBuildService = provider.GetRequiredService<MsBuildService>();
var nodes = locator.FullScan("C:\\Users\\joel\\source\\repos\\Dependify");
var solution = nodes.OfType<SolutionReferenceNode>().FirstOrDefault();
var graph = msBuildService.AnalyzeReferences(solution, MsBuildConfig.Default);
var subgraph = graph.SubGraph(n => n.Id.Contains("AwesomeProjectName"));
dotnet cake --target build
dotnet cake --target test
dotnet cake --target pack
dotnet tool install --global --add-source ./Artefacts Dependify.Cli --prerelease
dotnet tool uninstall Dependify.Cli -g
dotnet watch run --project ./src/Dependify.Cli/ -- \
serve $dev/cap-aspire/ \
--endpoint "http://localhost:1234/v1/chat/completions" \
--model-id "LM Studio Community/Meta-Llama-3-8B-Instruct-GGUF" \
--api-key "lm-studio" \
--log-level "Information"
dotnet watch run --project ./src/Dependify.Cli/ -- \
serve $dev/cap-aspire/ \
--endpoint "" \
--deployment-name "gpt-35-turbo" \
--api-key "" \
--log-level "Information"
Set the API key for the AppHost with the following command:
dotnet user-secrets set "Parameters:api-key" "<api-key>"
dotnet user-secrets set "Parameters:endpoint" "<endpoint>"