Getting Started#
Installation#
CommandDotNet can be installed from nuget.org
dotnet add package CommandDotNet
Install-Package CommandDotNet
Let's build a calculator#
Let's say you want to create a calculator console application which can perform 2 operations:
- Addition
- Subtraction
It prints the results on console.
Let's begin with creating the class
public class Calculator
{
public void Add(int value1, int value2)
{
Console.WriteLine($"Answer: {value1 + value2}");
}
public void Subtract(int value1, int value2)
{
Console.WriteLine($"Answer: {value1 - value2}");
}
}
Now that we have our calculator ready, let's see about how we can call it from command line.
class Program
{
static int Main(string[] args)
{
return new AppRunner<Calculator>().Run(args);
}
}
Assuming our application's name is example.dll
let's try and run this app from command line using dotnet
~
$ dotnet example.dll --help
Usage: dotnet example.dll [command]
Commands:
Add
Subtract
Use "dotnet example.dll [command] --help" for more information about a command.
Voila!
So, as you might have already guessed, it is detecting methods of the calculator class. How about adding some helpful description.
[Command(Description = "Performs mathematical calculations")]
public class Calculator
{
[Command(Description = "Adds two numbers")]
public void Add(int value1, int value2)
{
Console.WriteLine($"Answer: {value1 + value2}");
}
[Command(Description = "Subtracts two numbers")]
public void Subtract(int value1, int value2)
{
Console.WriteLine($"Answer: {value1 - value2}");
}
}
This should do it.
Let's see how the help appears now.
~
$ dotnet example.dll --help
Performs mathematical calculations
Usage: dotnet example.dll [command]
Commands:
Add Adds two numbers
Subtract Subtracts two numbers
Use "dotnet example.dll [command] --help" for more information about a command.
Descriptions are not required but can be very useful depending upon the complexity of your app and the audience.
Now let's see help for the Add command.
~
$ dotnet example.dll Add --help
Adds two numbers
Usage: dotnet example.dll Add [arguments]
Arguments:
x <NUMBER>
y <NUMBER>
Here we see arguments for addition and their type. See the Arguments section for more options.
Let's try and add two numbers.
~
$ dotnet example.dll Add 40 20
Answer: 60
Let's add some tests#
public class PipedInputTests
{
[Test]
public void Add_Given2Numbers_Should_OutputSum()
{
var result = new AppRunner<Calculator>().RunInMem("Add 40 20");
result.ExitCode.Should().Be(0);
result.OutputShouldBe(@"60");
}
}
public class PipedInputTests
{
[Test]
public void Add_Given2Numbers_Should_OutputSum()
{
new AppRunner<Calculator>().Verify(new Scenario
{
When = { Args = "Add 40 20" },
Then = { Output = @"60" }
});
}
}
See Test Tools in the Testing help section for more details
Opt-In to additional features#
In the Program.Main
, we configured the app with the basic feature set.
return new AppRunner<Calculator>().Run(args);
To take advantage of many more additional features, such as
debug & parse directives,
ctrl+c support,
prompting,
piping,
response files and typo suggestions, add UseDefaultMiddleware()
return new AppRunner<Calculator>()
.UseDefaultMiddleware()
.Run(args);
see Default Middleware for more details and options for using default middleware.
Next Steps#
You get the gist of this library now. This may be all you need to start your app.
Check out the
-
Commands section for more about defining commands, subcommands and arguments.
-
Arguments section for more about defining arguments.
-
Argument Values section for more about providing values to arguments.
-
Help section for options to modify help and other help features.
-
Diagnostics section for a rich set of tools to simplify troubleshooting
-
Other Features section to see the additional features available.
-
Extensibility section if the framework is missing a feature you need and you're interested in adding it yourself. For questions, ping us on our Discord channel or create a GitHub Issue
-
Test Tools section for a test package to test console output with this framework. These tools enable you to provide end-to-end testing with the same experience as the console as well as testing middleware and other extensibility components. This package is used to test all of the CommandDotNet features.