Albatross.CommandLine
8.0.2
Prefix Reserved
dotnet add package Albatross.CommandLine --version 8.0.2
NuGet\Install-Package Albatross.CommandLine -Version 8.0.2
<PackageReference Include="Albatross.CommandLine" Version="8.0.2" />
<PackageVersion Include="Albatross.CommandLine" Version="8.0.2" />
<PackageReference Include="Albatross.CommandLine" />
paket add Albatross.CommandLine --version 8.0.2
#r "nuget: Albatross.CommandLine, 8.0.2"
#:package Albatross.CommandLine@8.0.2
#addin nuget:?package=Albatross.CommandLine&version=8.0.2
#tool nuget:?package=Albatross.CommandLine&version=8.0.2
Albatross.CommandLine
A .NET library that simplifies creating command-line applications with System.CommandLine. It provides automatic code generation and dependency injection support while maintaining full access to System.CommandLine's capabilities. The framework is opinionated toward async actions with out-of-the-box support for cancellation and graceful shutdown.
Designed for enterprise CLI applications, Albatross.CommandLine enforces consistent async patterns, built-in dependency injection, and graceful shutdown handling. These opinionated choices reduce complexity and ensure scalability from simple utilities to complex enterprise workflows.
Key Features
- Minimal Boilerplate - Attribute-based command definition with automatic code generation
- Dependency Injection - Built-in DI container integration
- Minimum Dependencies - Only depends on
System.CommandLineandMicrosoft.Extensions.Hosting. - Full Flexibility - Direct access to
System.CommandLinewhen needed - Cancellation & Graceful Shutdown - Built-in support for Ctrl+C interruption via cancellation tokens and graceful shutdown handling
- Reusable Parameter - Create customized
OptionandArgumentclasses and use[UseOption<T>]and[UseArgument<T>]attributes to compose them into commands with automatic code generation - Advanced Option Handlers - Injectable async option handlers with
[OptionHandler]attribute for pre-processing and input transformation patterns. Execute database validation, API calls, or transform simple inputs into complex objects before command execution - Easy Extensions - Use
CommandHost.ConfigureHost()to bootstrap additional services, or use Albatross.CommandLine.Defaults for pre-configured Serilog logging and JSON/environment configuration support
Quick Start
Bootstrapping
Create an console app. In the program.cs file, insert the code below:
internal class Program {
static async Task<int> Main(string[] args) {
await using var host = new CommandHost("Sample Command Line Application")
.RegisterServices(RegisterServices)
// this method is generated by source generator
// this line will not compile before the creation of the first command
.AddCommands()
.Parse(args)
.Build();
return await host.InvokeAsync();
}
static void RegisterServices(ParseResult result, IConfiguration configuration, IServiceCollection services) {
// RegisterCommands method is generated by codegen
services.RegisterCommands();
// register the rest of the depencency here
...
}
}
Define a Verb
[Verb<HelloWorldCommandHandler>("hello", Description = "The HelloWorld command")]
public record class HelloWorldParams {
[Option]
public required string Name { get; init; }
}
Create the Command Handler
The Command Handler has to inherit interface: IAsyncCommandHandler
public class HelloWorldCommandHandler : IAsyncCommandHandler {
ParseResult result;
HelloWorldParams parameters;
ILogger logger;
public HelloWorldCommandHandler(ParseResult result, HelloWorldParams parameters, ILogger<HelloWorldCommandHandler> logger) {
this.result = result;
this.parameters = parameters;
this.logger = logger;
}
public async Task<int> InvokeAsync(CancellationToken cancellationToken) {
// do your work here
Console.WriteLine($"{result} is invoked with {parameter}");
}
}
Run the app
Usage: dotnet run -- hello --name test
Dependencies
- System.CommandLine 2.0.1+
- Microsoft.Extensions.Hosting 8.0.1+
Prerequisites
- C# Compiler 4.10.0+ (included with .NET 8 SDK)
📖 Documentation
Links
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
| .NET Core | netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
| .NET Standard | netstandard2.1 is compatible. |
| MonoAndroid | monoandroid was computed. |
| MonoMac | monomac was computed. |
| MonoTouch | monotouch was computed. |
| Tizen | tizen60 was computed. |
| Xamarin.iOS | xamarinios was computed. |
| Xamarin.Mac | xamarinmac was computed. |
| Xamarin.TVOS | xamarintvos was computed. |
| Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETStandard 2.1
- Albatross.CommandLine.CodeGen (>= 8.0.2)
- Microsoft.Extensions.Hosting (>= 8.0.1)
- System.CommandLine (>= 2.0.1)
NuGet packages (3)
Showing the top 3 NuGet packages that depend on Albatross.CommandLine:
| Package | Downloads |
|---|---|
|
Albatross.CommandLine.Defaults
Package Description |
|
|
Albatross.EFCore.Admin
Package Description |
|
|
Albatross.CommandLine.Inputs
Package Description |
GitHub repositories
This package is not used by any popular GitHub repositories.