AppCommand 1.0.0
Change commands exit code to 0.
See the version list below for details.
dotnet add package AppCommand --version 1.0.0
NuGet\Install-Package AppCommand -Version 1.0.0
<PackageReference Include="AppCommand" Version="1.0.0" />
paket add AppCommand --version 1.0.0
#r "nuget: AppCommand, 1.0.0"
// Install AppCommand as a Cake Addin #addin nuget:?package=AppCommand&version=1.0.0 // Install AppCommand as a Cake Tool #tool nuget:?package=AppCommand&version=1.0.0
AppCommand:
Concept:
Sometimes we need to use our web application for some other purposes. Such as running our seeds, applying our pending migrations or dropping the database and etc.
We don't want to build our application from scratch or even we don't have access to source code. We also need to access our services and create instance from them.
At this situation AppCommand package can help us.
You can easily create a new CLI command and pass you parameters to it and run your application for what you want.
Commands that created with AppCommand can access to DI tree, so you can inject your services to this commands.
How to enable:
Dotnet 5 or below:
Put following lines to Main
function in Program
class:
CommandManager.SearchForCommands();
var host = CreateHostBuilder(args).Build();
using (var scope = host.Services.CreateScope()){
CommandManager.SetServiceProvider(scope.ServiceProvider);
await CommandManager.InvokeCommand(args);
}
host.Run();
Note that you change Main
method to an async
method.
Dotnet 6 or later:
Put following lines after var app = builder.Build();
line Program.cs
in file:
CommandManager.SearchForCommands();
CommandManager.SetServiceProvider(app.Services);
CommandManager.InvokeCommand(args);
How add new command:
- Create a
TestCommand
class. - Add
[Command('test')]
attribute toTestCommand
class. - Inherit
TestCommand
fromAbstractCommand
. - Implement what you want in
Run
method.
Your class should looks like this:
[Command("test")]
public class TestCommand : AbstractCommand
{
public ILogger<TestCommand> Logger { get; set; }
public TestCommand(ILogger<TestCommand> logger)
{
/// All services you want to inject.
Logger = logger;
}
public override Task Run(string[] args, CancellationToken cancellationToken = default)
{
// Implement what you want.
Logger.LogInformation("Hi there!!!");
var applicationArgs = args.Aggregate((x, y) => x += $" {y}");
Logger.LogInformation("ApplicationArgs = {applicationArgs}", applicationArgs);
Thread.Sleep(100);
return Task.CompletedTask;
}
}
How to run specific command:
You have 2 ways to run your commands:
- If you have access ro source code or you want to compile it:
run this command in terminaldotnet run YOUR_COMMAND ARGS
- If you don't have access to source code or you don't want to compile it:
run this command in terminal./YOUR_APP YOUR_COMMAND ARGS
Available commands:
These commands will be updated over time, you can add a command and create an RP to this repo.
Command | Description | Args |
---|---|---|
help |
Prints all available commands |
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net6.0 is compatible. 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. |
-
net6.0
- No dependencies.
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.